-
Notifications
You must be signed in to change notification settings - Fork 696
Expand file tree
/
Copy pathconfdb_test.go
More file actions
97 lines (83 loc) · 2.83 KB
/
Copy pathconfdb_test.go
File metadata and controls
97 lines (83 loc) · 2.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
// -*- Mode: Go; indent-tabs-mode: t -*-
/*
* Copyright (C) 2024 Canonical Ltd
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package client_test
import (
"encoding/json"
"io"
"net/url"
"time"
"github.com/snapcore/snapd/client"
. "gopkg.in/check.v1"
)
func (cs *clientSuite) TestConfdbGet(c *C) {
cs.status = 202
cs.rsp = `{
"change": "123",
"status-code": 202,
"type": "async"
}`
chgID, err := cs.cli.ConfdbGetViaView("a/b/c", []string{"foo", "bar"}, nil, nil)
c.Assert(err, IsNil)
c.Assert(chgID, Equals, "123")
c.Check(cs.reqs[0].Method, Equals, "GET")
c.Check(cs.reqs[0].URL.Path, Equals, "/v2/confdb/a/b/c")
c.Check(cs.reqs[0].URL.Query(), DeepEquals, url.Values{"keys": []string{"foo,bar"}})
}
func (cs *clientSuite) TestConfdbGetWithConstraints(c *C) {
cs.status = 202
cs.rsp = `{
"change": "123",
"status-code": 202,
"type": "async"
}`
constraints := map[string]any{"bar": "value1", "baz": "value2"}
chgID, err := cs.cli.ConfdbGetViaView("a/b/c", []string{"foo"}, constraints, nil)
c.Assert(err, IsNil)
c.Assert(chgID, Equals, "123")
c.Assert(cs.reqs[0].Method, Equals, "GET")
c.Assert(cs.reqs[0].URL.Path, Equals, "/v2/confdb/a/b/c")
query := cs.reqs[0].URL.Query()
c.Check(query.Get("keys"), Equals, "foo")
cstrsRaw := query.Get("constraints")
var cstrs map[string]any
err = json.Unmarshal([]byte(cstrsRaw), &cstrs)
c.Assert(err, IsNil)
c.Assert(cstrs, DeepEquals, constraints)
}
func (cs *clientSuite) TestConfdbSet(c *C) {
cs.status = 202
cs.rsp = `{"type": "async", "status-code": 202, "change": "123"}`
timeout := 10 * time.Second
opts := &client.ConfdbOptions{
AccessTimeout: &timeout,
}
chgID, err := cs.cli.ConfdbSetViaView("a/b/c", map[string]any{"foo": "bar", "baz": json.Number("1")}, opts)
c.Check(err, IsNil)
c.Check(chgID, Equals, "123")
c.Assert(cs.reqs, HasLen, 1)
c.Check(cs.reqs[0].Method, Equals, "PUT")
c.Check(cs.reqs[0].Header.Get("Content-Type"), Equals, "application/json")
c.Check(cs.reqs[0].URL.Path, Equals, "/v2/confdb/a/b/c")
data, err := io.ReadAll(cs.reqs[0].Body)
c.Assert(err, IsNil)
// need to decode because entries may have been encoded in any order
res := make(map[string]any)
err = json.Unmarshal(data, &res)
c.Assert(err, IsNil)
c.Check(string(data), Equals, `{"options":{"access-timeout":"10s"},"values":{"baz":1,"foo":"bar"}}`)
}