~nskaggs/+junk/xenial-test

« back to all changes in this revision

Viewing changes to src/github.com/juju/gomaasapi/file_test.go

  • Committer: Nicholas Skaggs
  • Date: 2016-10-24 20:56:05 UTC
  • Revision ID: nicholas.skaggs@canonical.com-20161024205605-z8lta0uvuhtxwzwl
Initi with beta15

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Copyright 2016 Canonical Ltd.
 
2
// Licensed under the LGPLv3, see LICENCE file for details.
 
3
 
 
4
package gomaasapi
 
5
 
 
6
import (
 
7
        "net/http"
 
8
 
 
9
        "github.com/juju/testing"
 
10
        jc "github.com/juju/testing/checkers"
 
11
        "github.com/juju/version"
 
12
        gc "gopkg.in/check.v1"
 
13
)
 
14
 
 
15
type fileSuite struct {
 
16
        testing.CleanupSuite
 
17
}
 
18
 
 
19
var _ = gc.Suite(&fileSuite{})
 
20
 
 
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?")`)
 
25
}
 
26
 
 
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)
 
31
        file := files[0]
 
32
        c.Assert(file.Filename(), gc.Equals, "test")
 
33
}
 
34
 
 
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)
 
38
}
 
39
 
 
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)
 
44
}
 
45
 
 
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")
 
56
}
 
57
 
 
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)
 
66
        file := files[0]
 
67
        content, err := file.ReadAll()
 
68
        c.Assert(err, jc.ErrorIsNil)
 
69
        c.Assert(string(content), gc.Equals, "some content\n")
 
70
}
 
71
 
 
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)
 
78
        err = file.Delete()
 
79
        c.Assert(err, jc.Satisfies, IsNoMatchError)
 
80
}
 
81
 
 
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)
 
89
        err = file.Delete()
 
90
        c.Assert(err, jc.Satisfies, IsNoMatchError)
 
91
}
 
92
 
 
93
var (
 
94
        fileResponse = `
 
95
{
 
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",
 
99
    "filename": "testing"
 
100
}
 
101
`
 
102
        filesResponse = `
 
103
[
 
104
    {
 
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",
 
107
        "filename": "test"
 
108
    },
 
109
    {
 
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"
 
113
    }
 
114
]
 
115
`
 
116
)