launchpad.net/~rogpeppe/juju-core/500-errgo-fix@v0.0.0-20140213181702-000000002356/provider/ec2/export_test.go (about)

     1  // Copyright 2012, 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package ec2
     5  
     6  import (
     7  	"io"
     8  
     9  	"launchpad.net/goamz/aws"
    10  	"launchpad.net/goamz/ec2"
    11  	"launchpad.net/goamz/s3"
    12  
    13  	"launchpad.net/juju-core/environs"
    14  	"launchpad.net/juju-core/environs/imagemetadata"
    15  	"launchpad.net/juju-core/environs/jujutest"
    16  	"launchpad.net/juju-core/environs/storage"
    17  	"launchpad.net/juju-core/instance"
    18  )
    19  
    20  func ControlBucketName(e environs.Environ) string {
    21  	return e.(*environ).ecfg().controlBucket()
    22  }
    23  
    24  func JujuGroupName(e environs.Environ) string {
    25  	return e.(*environ).jujuGroupName()
    26  }
    27  
    28  func MachineGroupName(e environs.Environ, machineId string) string {
    29  	return e.(*environ).machineGroupName(machineId)
    30  }
    31  
    32  func EnvironEC2(e environs.Environ) *ec2.EC2 {
    33  	return e.(*environ).ec2()
    34  }
    35  
    36  func EnvironS3(e environs.Environ) *s3.S3 {
    37  	return e.(*environ).s3()
    38  }
    39  
    40  func InstanceEC2(inst instance.Instance) *ec2.Instance {
    41  	return inst.(*ec2Instance).Instance
    42  }
    43  
    44  // BucketStorage returns a storage instance addressing
    45  // an arbitrary s3 bucket.
    46  func BucketStorage(b *s3.Bucket) storage.Storage {
    47  	return &ec2storage{
    48  		bucket: b,
    49  	}
    50  }
    51  
    52  // DeleteBucket deletes the s3 bucket used by the storage instance.
    53  func DeleteBucket(s storage.Storage) error {
    54  	return deleteBucket(s.(*ec2storage))
    55  }
    56  
    57  var testRoundTripper = &jujutest.ProxyRoundTripper{}
    58  
    59  func init() {
    60  	// Prepare mock http transport for overriding metadata and images output in tests.
    61  	testRoundTripper.RegisterForScheme("test")
    62  }
    63  
    64  // TODO: Apart from overriding different hardcoded hosts, these two test helpers are identical. Let's share.
    65  
    66  var origImagesUrl = imagemetadata.DefaultBaseURL
    67  
    68  // UseTestImageData causes the given content to be served
    69  // when the ec2 client asks for image data.
    70  func UseTestImageData(files map[string]string) {
    71  	if files != nil {
    72  		testRoundTripper.Sub = jujutest.NewCannedRoundTripper(files, nil)
    73  		imagemetadata.DefaultBaseURL = "test:"
    74  		signedImageDataOnly = false
    75  	} else {
    76  		signedImageDataOnly = true
    77  		testRoundTripper.Sub = nil
    78  		imagemetadata.DefaultBaseURL = origImagesUrl
    79  	}
    80  }
    81  
    82  func UseTestRegionData(content map[string]aws.Region) {
    83  	if content != nil {
    84  		allRegions = content
    85  	} else {
    86  		allRegions = aws.Regions
    87  	}
    88  
    89  }
    90  
    91  // UseTestInstanceTypeData causes the given instance type
    92  // cost data to be served for the "test" region.
    93  func UseTestInstanceTypeData(content instanceTypeCost) {
    94  	if content != nil {
    95  		allRegionCosts["test"] = content
    96  	} else {
    97  		delete(allRegionCosts, "test")
    98  	}
    99  }
   100  
   101  var origMetadataHost = metadataHost
   102  
   103  func UseTestMetadata(files map[string]string) {
   104  	if files != nil {
   105  		testRoundTripper.Sub = jujutest.NewCannedRoundTripper(files, nil)
   106  		metadataHost = "test:"
   107  	} else {
   108  		testRoundTripper.Sub = nil
   109  		metadataHost = origMetadataHost
   110  	}
   111  }
   112  
   113  var (
   114  	ShortAttempt   = &shortAttempt
   115  	StorageAttempt = &storageAttempt
   116  )
   117  
   118  func EC2ErrCode(err error) string {
   119  	return ec2ErrCode(err)
   120  }
   121  
   122  // FabricateInstance creates a new fictitious instance
   123  // given an existing instance and a new id.
   124  func FabricateInstance(inst instance.Instance, newId string) instance.Instance {
   125  	oldi := inst.(*ec2Instance)
   126  	newi := &ec2Instance{
   127  		e:        oldi.e,
   128  		Instance: &ec2.Instance{},
   129  	}
   130  	*newi.Instance = *oldi.Instance
   131  	newi.InstanceId = newId
   132  	return newi
   133  }
   134  
   135  // Access non exported methods on ec2.storage
   136  type Storage interface {
   137  	Put(file string, r io.Reader, length int64) error
   138  	ResetMadeBucket()
   139  }
   140  
   141  func (s *ec2storage) ResetMadeBucket() {
   142  	s.Lock()
   143  	defer s.Unlock()
   144  	s.madeBucket = false
   145  }
   146  
   147  var TestImagesData = map[string]string{
   148  	"/streams/v1/index.json": `
   149  		{
   150  		 "index": {
   151  		  "com.ubuntu.cloud:released": {
   152  		   "updated": "Wed, 01 May 2013 13:31:26 +0000",
   153  		   "clouds": [
   154  			{
   155  			 "region": "test",
   156  			 "endpoint": "https://ec2.endpoint.com"
   157  			}
   158  		   ],
   159  		   "cloudname": "aws",
   160  		   "datatype": "image-ids",
   161  		   "format": "products:1.0",
   162  		   "products": [
   163  			"com.ubuntu.cloud:server:12.04:amd64",
   164  			"com.ubuntu.cloud:server:12.04:i386",
   165  			"com.ubuntu.cloud:server:12.04:amd64",
   166  			"com.ubuntu.cloud:server:12.10:amd64",
   167  			"com.ubuntu.cloud:server:13.04:i386"
   168  		   ],
   169  		   "path": "streams/v1/com.ubuntu.cloud:released:aws.js"
   170  		  }
   171  		 },
   172  		 "updated": "Wed, 01 May 2013 13:31:26 +0000",
   173  		 "format": "index:1.0"
   174  		}
   175  `,
   176  	"/streams/v1/com.ubuntu.cloud:released:aws.js": `
   177  {
   178   "content_id": "com.ubuntu.cloud:released:aws",
   179   "products": {
   180     "com.ubuntu.cloud:server:12.04:amd64": {
   181       "release": "precise",
   182       "version": "12.04",
   183       "arch": "amd64",
   184       "versions": {
   185         "20121218": {
   186           "items": {
   187             "usee1pi": {
   188               "root_store": "instance",
   189               "virt": "pv",
   190               "region": "us-east-1",
   191               "id": "ami-00000011"
   192             },
   193             "usww1pe": {
   194               "root_store": "ebs",
   195               "virt": "pv",
   196               "region": "eu-west-1",
   197               "id": "ami-00000016"
   198             },
   199             "apne1pe": {
   200               "root_store": "ebs",
   201               "virt": "pv",
   202               "region": "ap-northeast-1",
   203               "id": "ami-00000026"
   204             },
   205             "apne1he": {
   206               "root_store": "ebs",
   207               "virt": "hvm",
   208               "region": "ap-northeast-1",
   209               "id": "ami-00000087"
   210             },
   211             "test1pe": {
   212               "root_store": "ebs",
   213               "virt": "pv",
   214               "region": "test",
   215               "id": "ami-00000033"
   216             },
   217             "test1he": {
   218               "root_store": "ebs",
   219               "virt": "hvm",
   220               "region": "test",
   221               "id": "ami-00000035"
   222             }
   223           },
   224           "pubname": "ubuntu-precise-12.04-amd64-server-20121218",
   225           "label": "release"
   226         }
   227       }
   228     },
   229     "com.ubuntu.cloud:server:12.04:i386": {
   230       "release": "precise",
   231       "version": "12.04",
   232       "arch": "i386",
   233       "versions": {
   234         "20121218": {
   235           "items": {
   236             "test1pe": {
   237               "root_store": "ebs",
   238               "virt": "pv",
   239               "region": "test",
   240               "id": "ami-00000034"
   241             },
   242             "apne1pe": {
   243               "root_store": "ebs",
   244               "virt": "pv",
   245               "region": "ap-northeast-1",
   246               "id": "ami-00000023"
   247             }
   248           },
   249           "pubname": "ubuntu-precise-12.04-i386-server-20121218",
   250           "label": "release"
   251         }
   252       }
   253     },
   254     "com.ubuntu.cloud:server:12.10:amd64": {
   255       "release": "quantal",
   256       "version": "12.10",
   257       "arch": "amd64",
   258       "versions": {
   259         "20121218": {
   260           "items": {
   261             "usee1pi": {
   262               "root_store": "instance",
   263               "virt": "pv",
   264               "region": "us-east-1",
   265               "id": "ami-00000011"
   266             },
   267             "usww1pe": {
   268               "root_store": "ebs",
   269               "virt": "pv",
   270               "region": "eu-west-1",
   271               "id": "ami-01000016"
   272             },
   273             "apne1pe": {
   274               "root_store": "ebs",
   275               "virt": "pv",
   276               "region": "ap-northeast-1",
   277               "id": "ami-01000026"
   278             },
   279             "apne1he": {
   280               "root_store": "ebs",
   281               "virt": "hvm",
   282               "region": "ap-northeast-1",
   283               "id": "ami-01000087"
   284             },
   285             "test1he": {
   286               "root_store": "ebs",
   287               "virt": "hvm",
   288               "region": "test",
   289               "id": "ami-01000035"
   290             }
   291           },
   292           "pubname": "ubuntu-quantal-12.10-amd64-server-20121218",
   293           "label": "release"
   294         }
   295       }
   296     },
   297     "com.ubuntu.cloud:server:12.10:i386": {
   298       "release": "quantal",
   299       "version": "12.10",
   300       "arch": "i386",
   301       "versions": {
   302         "20121218": {
   303           "items": {
   304             "test1pe": {
   305               "root_store": "ebs",
   306               "virt": "pv",
   307               "region": "test",
   308               "id": "ami-01000034"
   309             },
   310             "apne1pe": {
   311               "root_store": "ebs",
   312               "virt": "pv",
   313               "region": "ap-northeast-1",
   314               "id": "ami-01000023"
   315             }
   316           },
   317           "pubname": "ubuntu-quantal-12.10-i386-server-20121218",
   318           "label": "release"
   319         }
   320       }
   321     },
   322     "com.ubuntu.cloud:server:13.04:i386": {
   323       "release": "raring",
   324       "version": "13.04",
   325       "arch": "i386",
   326       "versions": {
   327         "20121218": {
   328           "items": {
   329             "test1pe": {
   330               "root_store": "ebs",
   331               "virt": "pv",
   332               "region": "test",
   333               "id": "ami-02000034"
   334             }
   335           },
   336           "pubname": "ubuntu-raring-13.04-i386-server-20121218",
   337           "label": "release"
   338         }
   339       }
   340     }
   341   },
   342   "format": "products:1.0"
   343  }
   344  `,
   345  }
   346  
   347  var TestInstanceTypeCosts = instanceTypeCost{
   348  	"m1.small":    60,
   349  	"m1.medium":   120,
   350  	"m1.large":    240,
   351  	"m1.xlarge":   480,
   352  	"t1.micro":    20,
   353  	"c1.medium":   145,
   354  	"c1.xlarge":   580,
   355  	"cc1.4xlarge": 1300,
   356  	"cc2.8xlarge": 2400,
   357  }
   358  
   359  var TestRegions = map[string]aws.Region{
   360  	"test": {
   361  		Name:        "test",
   362  		EC2Endpoint: "https://ec2.endpoint.com",
   363  	},
   364  }