Skip to content

Commit 17173e5

Browse files
committed
test: add api test for image load and save
Signed-off-by: xiechengsheng <XIE1995@whut.edu.cn>
1 parent c87096d commit 17173e5

6 files changed

Lines changed: 116 additions & 23 deletions

test/api_container_pause_test.go

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package main
22

33
import (
4+
"github.com/alibaba/pouch/apis/types"
45
"github.com/alibaba/pouch/test/environment"
56
"github.com/alibaba/pouch/test/request"
67

@@ -32,12 +33,34 @@ func (suite *APIContainerPauseSuite) TestPauseUnpauseOk(c *check.C) {
3233
c.Assert(err, check.IsNil)
3334
CheckRespStatus(c, resp, 204)
3435

35-
// TODO: Add state check
36+
// add state check
37+
resp, err = request.Get("/containers/" + cname + "/json")
38+
c.Assert(err, check.IsNil)
39+
CheckRespStatus(c, resp, 200)
40+
41+
got := types.ContainerJSON{}
42+
err = request.DecodeBody(&got, resp.Body)
43+
c.Assert(err, check.IsNil)
44+
defer resp.Body.Close()
45+
46+
c.Assert(string(got.State.Status), check.Equals, "paused")
3647

3748
resp, err = request.Post("/containers/" + cname + "/unpause")
3849
c.Assert(err, check.IsNil)
3950
CheckRespStatus(c, resp, 204)
4051

52+
// add state check
53+
resp, err = request.Get("/containers/" + cname + "/json")
54+
c.Assert(err, check.IsNil)
55+
CheckRespStatus(c, resp, 200)
56+
57+
got = types.ContainerJSON{}
58+
err = request.DecodeBody(&got, resp.Body)
59+
c.Assert(err, check.IsNil)
60+
defer resp.Body.Close()
61+
62+
c.Assert(string(got.State.Status), check.Equals, "running")
63+
4164
DelContainerForceMultyTime(c, cname)
4265
}
4366

test/api_image_delete_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ func init() {
1717
// SetUpTest does common setup in the beginning of each test.
1818
func (suite *APIImageDeleteSuite) SetUpTest(c *check.C) {
1919
SkipIfFalse(c, environment.IsLinux)
20+
21+
PullImage(c, busyboxImage)
2022
}
2123

2224
// TestDeleteNonExisting tests deleting a non-existing image return error.
@@ -27,6 +29,19 @@ func (suite *APIImageDeleteSuite) TestDeleteNonExisting(c *check.C) {
2729
CheckRespStatus(c, resp, 404)
2830
}
2931

32+
// TestDeleteImageOk tests deleting an image is ok.
33+
func (suite *APIImageDeleteSuite) TestDeleteImageOk(c *check.C) {
34+
resp, err := request.Delete("/images/" + busyboxImage)
35+
c.Assert(err, check.IsNil)
36+
CheckRespStatus(c, resp, 204)
37+
38+
resp, err = request.Get("/images/" + busyboxImage + "/json")
39+
c.Assert(err, check.IsNil)
40+
CheckRespStatus(c, resp, 404)
41+
42+
PullImage(c, busyboxImage)
43+
}
44+
3045
// TestDeleteUsingImage tests deleting an image in use by running container will fail.
3146
func (suite *APIImageDeleteSuite) TestDeleteUsingImage(c *check.C) {
3247
cname := "TestDeleteUsingImage"

test/api_image_load_test.go

Lines changed: 0 additions & 22 deletions
This file was deleted.
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package main
2+
3+
import (
4+
"net/url"
5+
6+
"github.com/alibaba/pouch/apis/types"
7+
"github.com/alibaba/pouch/test/environment"
8+
"github.com/alibaba/pouch/test/request"
9+
10+
"github.com/go-check/check"
11+
)
12+
13+
// APIImageSaveLoadSuite is the test suite for image save and load API.
14+
type APIImageSaveLoadSuite struct{}
15+
16+
func init() {
17+
check.Suite(&APIImageSaveLoadSuite{})
18+
}
19+
20+
// SetUpTest does common setup in the beginning of each test.
21+
func (suite *APIImageSaveLoadSuite) SetUpTest(c *check.C) {
22+
SkipIfFalse(c, environment.IsLinux)
23+
24+
PullImage(c, busyboxImage)
25+
}
26+
27+
// TestImageSaveLoadOk tests saving and loading images are OK.
28+
func (suite *APIImageSaveLoadSuite) TestImageSaveLoadOk(c *check.C) {
29+
before, err := request.Get("/images/" + busyboxImage + "/json")
30+
c.Assert(err, check.IsNil)
31+
CheckRespStatus(c, before, 200)
32+
gotBefore := types.ImageInfo{}
33+
err = request.DecodeBody(&gotBefore, before.Body)
34+
c.Assert(err, check.IsNil)
35+
36+
q := url.Values{}
37+
q.Set("name", busyboxImage)
38+
query := request.WithQuery(q)
39+
resp, err := request.Get("/images/save", query)
40+
c.Assert(err, check.IsNil)
41+
defer resp.Body.Close()
42+
43+
loadImageName := "load-busybox"
44+
q = url.Values{}
45+
q.Set("name", loadImageName)
46+
q.Set("quiet", "0")
47+
48+
query = request.WithQuery(q)
49+
reader := request.WithRawData(resp.Body)
50+
header := request.WithHeader("Content-Type", "application/x-tar")
51+
52+
resp, err = request.Post("/images/load", query, reader, header)
53+
c.Assert(err, check.IsNil)
54+
CheckRespStatus(c, resp, 200)
55+
56+
after, err := request.Get("/images/" + loadImageName + ":" + environment.BusyboxTag + "/json")
57+
c.Assert(err, check.IsNil)
58+
CheckRespStatus(c, after, 200)
59+
defer request.Delete("/images/" + loadImageName + ":" + environment.BusyboxTag)
60+
61+
gotAfter := types.ImageInfo{}
62+
err = request.DecodeBody(&gotAfter, after.Body)
63+
c.Assert(err, check.IsNil)
64+
65+
c.Assert(gotBefore.ID, check.Equals, gotAfter.ID)
66+
c.Assert(gotBefore.CreatedAt, check.Equals, gotAfter.CreatedAt)
67+
c.Assert(gotBefore.Size, check.Equals, gotAfter.Size)
68+
}

test/cli_save_and_load_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ func (suite *PouchSaveLoadSuite) TestSaveLoadWorks(c *check.C) {
5252
loadImageName := "load-busybox"
5353
res = command.PouchRun("load", "-i", filepath.Join(dir, "busybox.tar"), loadImageName)
5454
res.Assert(c, icmd.Success)
55+
defer command.PouchRun("rmi", loadImageName+":"+environment.BusyboxTag)
5556

5657
res = command.PouchRun("image", "inspect", loadImageName+":"+environment.BusyboxTag)
5758
res.Assert(c, icmd.Success)

test/request/request.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,14 @@ func WithQuery(query url.Values) Option {
4848
}
4949
}
5050

51+
// WithRawData sets the input data with raw data
52+
func WithRawData(data io.ReadCloser) Option {
53+
return func(r *http.Request) error {
54+
r.Body = data
55+
return nil
56+
}
57+
}
58+
5159
// WithJSONBody encodes the input data to JSON and sets it to the body in http.Request
5260
func WithJSONBody(obj interface{}) Option {
5361
return func(r *http.Request) error {

0 commit comments

Comments
 (0)