1
// Copyright 2014 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
7
jc "github.com/juju/testing/checkers"
8
"google.golang.org/api/compute/v1"
11
"github.com/juju/juju/provider/gce/google"
14
type instanceSuite struct {
18
var _ = gc.Suite(&instanceSuite{})
20
func (s *instanceSuite) TestNewInstance(c *gc.C) {
21
inst := google.NewInstanceRaw(&s.RawInstanceFull, &s.InstanceSpec)
23
c.Check(inst.ID, gc.Equals, "spam")
24
c.Check(inst.ZoneName, gc.Equals, "a-zone")
25
c.Check(inst.Status(), gc.Equals, google.StatusRunning)
26
c.Check(inst.Metadata(), jc.DeepEquals, s.Metadata)
27
c.Check(inst.Addresses(), jc.DeepEquals, s.Addresses)
28
spec := google.GetInstanceSpec(inst)
29
c.Check(spec, jc.DeepEquals, &s.InstanceSpec)
32
func (s *instanceSuite) TestNewInstanceNoSpec(c *gc.C) {
33
inst := google.NewInstanceRaw(&s.RawInstanceFull, nil)
35
spec := google.GetInstanceSpec(inst)
36
c.Check(spec, gc.IsNil)
39
func (s *instanceSuite) TestInstanceRootDiskGB(c *gc.C) {
40
size := s.Instance.RootDiskGB()
42
c.Check(size, gc.Equals, uint64(15))
45
func (s *instanceSuite) TestInstanceRootDiskGBNilSpec(c *gc.C) {
46
inst := google.Instance{}
47
size := inst.RootDiskGB()
49
c.Check(size, gc.Equals, uint64(0))
52
func (s *instanceSuite) TestInstanceStatus(c *gc.C) {
53
status := s.Instance.Status()
55
c.Check(status, gc.Equals, google.StatusRunning)
58
func (s *instanceSuite) TestInstanceStatusDown(c *gc.C) {
59
s.Instance.InstanceSummary.Status = google.StatusDown
60
status := s.Instance.Status()
62
c.Check(status, gc.Equals, google.StatusDown)
65
func (s *instanceSuite) TestInstanceAddresses(c *gc.C) {
66
addresses := s.Instance.Addresses()
68
c.Check(addresses, jc.DeepEquals, s.Addresses)
71
func (s *instanceSuite) TestInstanceMetadata(c *gc.C) {
72
metadata := s.Instance.Metadata()
74
c.Check(metadata, jc.DeepEquals, map[string]string{"eggs": "steak"})
77
func (s *instanceSuite) TestFormatAuthorizedKeys(c *gc.C) {
78
formatted, err := google.FormatAuthorizedKeys("abcd", "john")
79
c.Assert(err, jc.ErrorIsNil)
81
c.Check(formatted, gc.Equals, "john:abcd\n")
84
func (s *instanceSuite) TestFormatAuthorizedKeysEmpty(c *gc.C) {
85
_, err := google.FormatAuthorizedKeys("", "john")
87
c.Check(err, gc.ErrorMatches, "empty rawAuthorizedKeys")
90
func (s *instanceSuite) TestFormatAuthorizedKeysNoUser(c *gc.C) {
91
_, err := google.FormatAuthorizedKeys("abcd", "")
93
c.Check(err, gc.ErrorMatches, "empty user")
96
func (s *instanceSuite) TestFormatAuthorizedKeysMultiple(c *gc.C) {
97
formatted, err := google.FormatAuthorizedKeys("abcd\ndcba\nqwer", "john")
98
c.Assert(err, jc.ErrorIsNil)
100
c.Check(formatted, gc.Equals, "john:abcd\njohn:dcba\njohn:qwer\n")
103
func (s *instanceSuite) TestPackMetadata(c *gc.C) {
104
expected := compute.Metadata{Items: []*compute.MetadataItems{{
108
data := map[string]string{"spam": "eggs"}
109
packed := google.PackMetadata(data)
111
c.Check(packed, jc.DeepEquals, &expected)
114
func (s *instanceSuite) TestUnpackMetadata(c *gc.C) {
115
expected := map[string]string{"spam": "eggs"}
116
packed := compute.Metadata{Items: []*compute.MetadataItems{{
120
data := google.UnpackMetadata(&packed)
122
c.Check(data, jc.DeepEquals, expected)
125
func (s *instanceSuite) TestFormatMachineType(c *gc.C) {
126
resolved := google.FormatMachineType("a-zone", "spam")
128
c.Check(resolved, gc.Equals, "zones/a-zone/machineTypes/spam")