Add extra info to verbose requests to PodSandboxStatus

If PodSandboxStatusRequest.Verbose is true now we are returning the cri-o
version in a JSON object for debug purposes. In the future extra information
(to be defined) should be added to the response

In order to avoid problems when we execute the tests in parallel the fixtures
for new test sandbox and container are creating their own random IDs and
returning them in case you need to refer to them.

Finally, "make testunit" is being run as root to solve a problem with a `chown`
that couldn't be performed otherwise.

This commit closes #1144

Signed-off-by: Álex González <agonzalezro@gmail.com>
This commit is contained in:
Álex González 2018-02-14 19:42:14 +01:00
parent 01b118116d
commit adf249e283
5 changed files with 149 additions and 9 deletions

View file

@ -0,0 +1,119 @@
package server
import (
"encoding/json"
"fmt"
"io/ioutil"
"math/rand"
"os"
"testing"
"time"
"github.com/kubernetes-incubator/cri-o/lib"
"github.com/kubernetes-incubator/cri-o/lib/sandbox"
"github.com/kubernetes-incubator/cri-o/oci"
"github.com/kubernetes-incubator/cri-o/version"
pb "k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2"
)
func init() {
rand.Seed(time.Now().UTC().UnixNano())
}
func newTestContainerServerOrFailNow(t *testing.T) (cs *lib.ContainerServer, dirsToCleanUp []string) {
tmpdir := os.Getenv("TMPDIR")
config := lib.DefaultConfig()
runRoot, err := ioutil.TempDir(tmpdir, "")
if err != nil {
t.Fatal(err)
}
config.RootConfig.RunRoot = runRoot
root, err := ioutil.TempDir(tmpdir, "")
if err != nil {
t.Fatal(err)
}
config.RootConfig.Root = root
config.RootConfig.Storage = "vfs"
cs, err = lib.New(config)
if err != nil {
t.Fatal(err)
}
return cs, []string{runRoot, root}
}
func newTestSandboxOrFailNow(t *testing.T) (string, *sandbox.Sandbox) {
id := fmt.Sprintf("id-for-sandbox-%d", rand.Int())
sb, err := sandbox.New(id, "", "", "", "", nil, nil, "", "", nil, "", "", false, false, "", "", nil)
if err != nil {
t.Fatal(err)
}
return id, sb
}
func newTestContainerOrFailNow(t *testing.T) *oci.Container {
id := fmt.Sprintf("id-for-container-%d", rand.Int())
c, err := oci.NewContainer(id, "", "", "", nil, nil, nil, nil, "", "", "", nil, "", false, false, false, false, false, "", time.Now(), "")
if err != nil {
t.Fatal(err)
}
return c
}
func setupServer(t *testing.T) (*Server, string, func()) {
containerServer, fs := newTestContainerServerOrFailNow(t)
teardown := func() {
for _, f := range fs {
defer os.RemoveAll(f)
}
}
server := &Server{ContainerServer: containerServer}
sandboxID, sb := newTestSandboxOrFailNow(t)
sb.SetInfraContainer(newTestContainerOrFailNow(t))
server.PodIDIndex().Add(sandboxID)
server.ContainerServer.AddSandbox(sb)
return server, sandboxID, teardown
}
func TestPodSandboxStatus(t *testing.T) {
server, sandboxID, teardown := setupServer(t)
defer teardown()
t.Run("Without verbose information", func(t *testing.T) {
resp, err := server.PodSandboxStatus(nil, &pb.PodSandboxStatusRequest{
PodSandboxId: sandboxID,
})
if err != nil {
t.Fatal(err)
}
if resp.Status == nil {
t.Error("expected non nil resp.Status")
}
if resp.Info != nil {
t.Error("expected nil resp.Info")
}
})
t.Run("With verbose information", func(t *testing.T) {
resp, err := server.PodSandboxStatus(nil, &pb.PodSandboxStatusRequest{
PodSandboxId: sandboxID,
Verbose: true,
})
if err != nil {
t.Fatal(err)
}
marshaledVersion := resp.Info["version"]
var versionPayload VersionPayload
must(t, json.Unmarshal([]byte(marshaledVersion), &versionPayload))
if version.Version != versionPayload.Version {
t.Errorf("expected: %s\ngot: %s", version.Version, versionPayload.Version)
}
})
}