1
// Copyright 2016 Canonical Ltd.
2
// Licensed under the LGPLv3, see LICENCE file for details.
9
"github.com/juju/testing"
10
jc "github.com/juju/testing/checkers"
11
"github.com/juju/version"
12
gc "gopkg.in/check.v1"
15
type fileSuite struct {
19
var _ = gc.Suite(&fileSuite{})
21
func (*fileSuite) TestReadFilesBadSchema(c *gc.C) {
22
_, err := readFiles(twoDotOh, "wat?")
23
c.Check(err, jc.Satisfies, IsDeserializationError)
24
c.Assert(err.Error(), gc.Equals, `file base schema check failed: expected list, got string("wat?")`)
27
func (*fileSuite) TestReadFiles(c *gc.C) {
28
files, err := readFiles(twoDotOh, parseJSON(c, filesResponse))
29
c.Assert(err, jc.ErrorIsNil)
30
c.Assert(files, gc.HasLen, 2)
32
c.Assert(file.Filename(), gc.Equals, "test")
35
func (*fileSuite) TestLowVersion(c *gc.C) {
36
_, err := readFiles(version.MustParse("1.9.0"), parseJSON(c, filesResponse))
37
c.Assert(err, jc.Satisfies, IsUnsupportedVersionError)
40
func (*fileSuite) TestHighVersion(c *gc.C) {
41
files, err := readFiles(version.MustParse("2.1.9"), parseJSON(c, filesResponse))
42
c.Assert(err, jc.ErrorIsNil)
43
c.Assert(files, gc.HasLen, 2)
46
func (s *fileSuite) TestReadAllFromGetFile(c *gc.C) {
47
// When get file is used, the response includes the body of the file
48
// base64 encoded, so ReadAll just decodes it.
49
server, controller := createTestServerController(c, s)
50
server.AddGetResponse("/api/2.0/files/testing/", http.StatusOK, fileResponse)
51
file, err := controller.GetFile("testing")
52
c.Assert(err, jc.ErrorIsNil)
53
content, err := file.ReadAll()
54
c.Assert(err, jc.ErrorIsNil)
55
c.Assert(string(content), gc.Equals, "this is a test\n")
58
func (s *fileSuite) TestReadAllFromFiles(c *gc.C) {
59
// When get file is used, the response includes the body of the file
60
// base64 encoded, so ReadAll just decodes it.
61
server, controller := createTestServerController(c, s)
62
server.AddGetResponse("/api/2.0/files/", http.StatusOK, filesResponse)
63
server.AddGetResponse("/api/2.0/files/?filename=test&op=get", http.StatusOK, "some content\n")
64
files, err := controller.Files("")
65
c.Assert(err, jc.ErrorIsNil)
67
content, err := file.ReadAll()
68
c.Assert(err, jc.ErrorIsNil)
69
c.Assert(string(content), gc.Equals, "some content\n")
72
func (s *fileSuite) TestDeleteMissing(c *gc.C) {
73
// If we get a file, but someone else deletes it first, we get a ...
74
server, controller := createTestServerController(c, s)
75
server.AddGetResponse("/api/2.0/files/testing/", http.StatusOK, fileResponse)
76
file, err := controller.GetFile("testing")
77
c.Assert(err, jc.ErrorIsNil)
79
c.Assert(err, jc.Satisfies, IsNoMatchError)
82
func (s *fileSuite) TestDelete(c *gc.C) {
83
// If we get a file, but someone else deletes it first, we get a ...
84
server, controller := createTestServerController(c, s)
85
server.AddGetResponse("/api/2.0/files/testing/", http.StatusOK, fileResponse)
86
server.AddDeleteResponse("/api/2.0/files/testing/", http.StatusOK, "")
87
file, err := controller.GetFile("testing")
88
c.Assert(err, jc.ErrorIsNil)
90
c.Assert(err, jc.Satisfies, IsNoMatchError)
96
"resource_uri": "/MAAS/api/2.0/files/testing/",
97
"content": "dGhpcyBpcyBhIHRlc3QK",
98
"anon_resource_uri": "/MAAS/api/2.0/files/?op=get_by_key&key=88e64b76-fb82-11e5-932f-52540051bf22",
105
"resource_uri": "/MAAS/api/2.0/files/test/",
106
"anon_resource_uri": "/MAAS/api/2.0/files/?op=get_by_key&key=3afba564-fb7d-11e5-932f-52540051bf22",
110
"resource_uri": "/MAAS/api/2.0/files/test-file.txt/",
111
"anon_resource_uri": "/MAAS/api/2.0/files/?op=get_by_key&key=69913e62-fad2-11e5-932f-52540051bf22",
112
"filename": "test-file.txt"