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