github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/provider/joyent/export_test.go (about) 1 // Copyright 2013 Joyent Inc. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package joyent 5 6 import ( 7 "bytes" 8 "fmt" 9 "text/template" 10 "time" 11 12 "github.com/joyent/gosign/auth" 13 jc "github.com/juju/testing/checkers" 14 "github.com/juju/utils" 15 gc "gopkg.in/check.v1" 16 17 "github.com/juju/juju/cloud" 18 "github.com/juju/juju/constraints" 19 "github.com/juju/juju/environs" 20 "github.com/juju/juju/environs/imagemetadata" 21 "github.com/juju/juju/environs/instances" 22 sstesting "github.com/juju/juju/environs/simplestreams/testing" 23 ) 24 25 // Use ShortAttempt to poll for short-term events. 26 // 27 // TODO(katco): 2016-08-09: lp:1611427 28 var ShortAttempt = utils.AttemptStrategy{ 29 Total: 5 * time.Second, 30 Delay: 200 * time.Millisecond, 31 } 32 33 var Provider environs.EnvironProvider = GetProviderInstance() 34 35 var indexData = ` 36 { 37 "index": { 38 "com.ubuntu.cloud:released:joyent": { 39 "updated": "Fri, 14 Feb 2014 13:39:35 +0000", 40 "clouds": [ 41 { 42 "region": "{{.Region}}", 43 "endpoint": "{{.SdcEndpoint.URL}}" 44 } 45 ], 46 "cloudname": "joyent", 47 "datatype": "image-ids", 48 "format": "products:1.0", 49 "products": [ 50 "com.ubuntu.cloud:server:16.04:amd64", 51 "com.ubuntu.cloud:server:14.04:amd64", 52 "com.ubuntu.cloud:server:12.10:amd64", 53 "com.ubuntu.cloud:server:13.04:amd64" 54 ], 55 "path": "streams/v1/com.ubuntu.cloud:released:joyent.json" 56 } 57 }, 58 "updated": "Fri, 14 Feb 2014 13:39:35 +0000", 59 "format": "index:1.0" 60 } 61 ` 62 63 var imagesData = ` 64 { 65 "content_id": "com.ubuntu.cloud:released:joyent", 66 "format": "products:1.0", 67 "updated": "Fri, 14 Feb 2014 13:39:35 +0000", 68 "datatype": "image-ids", 69 "products": { 70 "com.ubuntu.cloud:server:16.04:amd64": { 71 "release": "trusty", 72 "version": "16.04", 73 "arch": "amd64", 74 "versions": { 75 "20160216": { 76 "items": { 77 "11223344-0a0a-ff99-11bb-0a1b2c3d4e5f": { 78 "region": "some-region", 79 "id": "11223344-0a0a-ff99-11bb-0a1b2c3d4e5f", 80 "virt": "kvm" 81 } 82 }, 83 "pubname": "ubuntu-trusty-16.04-amd64-server-20160216", 84 "label": "release" 85 } 86 } 87 }, 88 "com.ubuntu.cloud:server:14.04:amd64": { 89 "release": "trusty", 90 "version": "14.04", 91 "arch": "amd64", 92 "versions": { 93 "20140214": { 94 "items": { 95 "11223344-0a0a-ff99-11bb-0a1b2c3d4e5f": { 96 "region": "some-region", 97 "id": "11223344-0a0a-ff99-11bb-0a1b2c3d4e5f", 98 "virt": "kvm" 99 } 100 }, 101 "pubname": "ubuntu-trusty-14.04-amd64-server-20140214", 102 "label": "release" 103 } 104 } 105 }, 106 "com.ubuntu.cloud:server:12.10:amd64": { 107 "release": "quantal", 108 "version": "12.10", 109 "arch": "amd64", 110 "versions": { 111 "20140214": { 112 "items": { 113 "11223344-0a0a-ee88-22ab-00aa11bb22cc": { 114 "region": "some-region", 115 "id": "11223344-0a0a-ee88-22ab-00aa11bb22cc", 116 "virt": "kvm" 117 } 118 }, 119 "pubname": "ubuntu-quantal-12.10-amd64-server-20140214", 120 "label": "release" 121 } 122 } 123 }, 124 "com.ubuntu.cloud:server:13.04:amd64": { 125 "release": "raring", 126 "version": "13.04", 127 "arch": "amd64", 128 "versions": { 129 "20140214": { 130 "items": { 131 "11223344-0a0a-dd77-33cd-abcd1234e5f6": { 132 "region": "some-region", 133 "id": "11223344-0a0a-dd77-33cd-abcd1234e5f6", 134 "virt": "kvm" 135 } 136 }, 137 "pubname": "ubuntu-raring-13.04-amd64-server-20140214", 138 "label": "release" 139 } 140 } 141 } 142 } 143 } 144 ` 145 146 func parseIndexData(creds *auth.Credentials) bytes.Buffer { 147 var metadata bytes.Buffer 148 149 t := template.Must(template.New("").Parse(indexData)) 150 if err := t.Execute(&metadata, creds); err != nil { 151 panic(fmt.Errorf("cannot generate index metdata: %v", err)) 152 } 153 154 return metadata 155 } 156 157 // Set Metadata requests to be served by the filecontent supplied. 158 func UseExternalTestImageMetadata(c *gc.C, creds *auth.Credentials) { 159 metadata := parseIndexData(creds) 160 files := map[string]string{ 161 "/streams/v1/index.json": metadata.String(), 162 "/streams/v1/com.ubuntu.cloud:released:joyent.json": imagesData, 163 } 164 sstesting.SetRoundTripperFiles(sstesting.AddSignedFiles(c, files), nil) 165 } 166 167 func UnregisterExternalTestImageMetadata() { 168 sstesting.SetRoundTripperFiles(nil, nil) 169 } 170 171 // RegisterMachinesEndpoint creates a fake endpoint so that 172 // machines api calls succeed. 173 func RegisterMachinesEndpoint() { 174 files := map[string]string{ 175 "/test/machines": "", 176 } 177 sstesting.SetRoundTripperFiles(files, nil) 178 } 179 180 // UnregisterMachinesEndpoint resets the machines endpoint. 181 func UnregisterMachinesEndpoint() { 182 sstesting.SetRoundTripperFiles(nil, nil) 183 } 184 185 func FindInstanceSpec( 186 e environs.Environ, series, arch, cons string, 187 imageMetadata []*imagemetadata.ImageMetadata, 188 ) (spec *instances.InstanceSpec, err error) { 189 env := e.(*joyentEnviron) 190 spec, err = env.FindInstanceSpec(&instances.InstanceConstraint{ 191 Series: series, 192 Arches: []string{arch}, 193 Region: env.cloud.Region, 194 Constraints: constraints.MustParse(cons), 195 }, imageMetadata) 196 return 197 } 198 199 // MakeCredentials creates credentials for a test. 200 func MakeCredentials(c *gc.C, endpoint string, cloudCredential cloud.Credential) *auth.Credentials { 201 creds, err := credentials(environs.CloudSpec{ 202 Endpoint: endpoint, 203 Credential: &cloudCredential, 204 }) 205 c.Assert(err, jc.ErrorIsNil) 206 return creds 207 } 208 209 var GetPorts = getPorts 210 211 var CreateFirewallRuleAll = createFirewallRuleAll 212 213 var CreateFirewallRuleVm = createFirewallRuleVm