github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/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  	"strings"
     8  
     9  	"gopkg.in/amz.v3/aws"
    10  	"gopkg.in/amz.v3/ec2"
    11  	gc "gopkg.in/check.v1"
    12  
    13  	"github.com/juju/juju/environs"
    14  	"github.com/juju/juju/environs/imagemetadata"
    15  	sstesting "github.com/juju/juju/environs/simplestreams/testing"
    16  	"github.com/juju/juju/instance"
    17  	jujustorage "github.com/juju/juju/storage"
    18  )
    19  
    20  func StorageEC2(vs jujustorage.VolumeSource) *ec2.EC2 {
    21  	return vs.(*ebsVolumeSource).env.ec2
    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 InstanceEC2(inst instance.Instance) *ec2.Instance {
    37  	return inst.(*ec2Instance).Instance
    38  }
    39  
    40  func TerminatedInstances(e environs.Environ) ([]instance.Instance, error) {
    41  	return e.(*environ).AllInstancesByState("shutting-down", "terminated")
    42  }
    43  
    44  func InstanceSecurityGroups(e environs.Environ, ids []instance.Id, states ...string) ([]ec2.SecurityGroup, error) {
    45  	return e.(*environ).instanceSecurityGroups(ids, states...)
    46  }
    47  
    48  var (
    49  	EC2AvailabilityZones        = &ec2AvailabilityZones
    50  	AvailabilityZoneAllocations = &availabilityZoneAllocations
    51  	RunInstances                = &runInstances
    52  	BlockDeviceNamer            = blockDeviceNamer
    53  	GetBlockDeviceMappings      = getBlockDeviceMappings
    54  	IsVPCNotUsableError         = isVPCNotUsableError
    55  	IsVPCNotRecommendedError    = isVPCNotRecommendedError
    56  )
    57  
    58  const VPCIDNone = vpcIDNone
    59  
    60  // TODO: Apart from overriding different hardcoded hosts, these two test helpers are identical. Let's share.
    61  
    62  // UseTestImageData causes the given content to be served
    63  // when the ec2 client asks for image data.
    64  func UseTestImageData(c *gc.C, files map[string]string) {
    65  	if files != nil {
    66  		sstesting.SetRoundTripperFiles(sstesting.AddSignedFiles(c, files), nil)
    67  	} else {
    68  		sstesting.SetRoundTripperFiles(nil, nil)
    69  	}
    70  }
    71  
    72  var (
    73  	ShortAttempt                   = &shortAttempt
    74  	DestroyVolumeAttempt           = &destroyVolumeAttempt
    75  	DeleteSecurityGroupInsistently = &deleteSecurityGroupInsistently
    76  	TerminateInstancesById         = &terminateInstancesById
    77  )
    78  
    79  func EC2ErrCode(err error) string {
    80  	return ec2ErrCode(err)
    81  }
    82  
    83  // FabricateInstance creates a new fictitious instance
    84  // given an existing instance and a new id.
    85  func FabricateInstance(inst instance.Instance, newId string) instance.Instance {
    86  	oldi := inst.(*ec2Instance)
    87  	newi := &ec2Instance{
    88  		e:        oldi.e,
    89  		Instance: &ec2.Instance{},
    90  	}
    91  	*newi.Instance = *oldi.Instance
    92  	newi.InstanceId = newId
    93  	return newi
    94  }
    95  
    96  func makeImage(id, storage, virtType, arch, version, region string) *imagemetadata.ImageMetadata {
    97  	return &imagemetadata.ImageMetadata{
    98  		Id:         id,
    99  		Storage:    storage,
   100  		VirtType:   virtType,
   101  		Arch:       arch,
   102  		Version:    version,
   103  		RegionName: region,
   104  		Endpoint:   "https://ec2.endpoint.com",
   105  		Stream:     "released",
   106  	}
   107  }
   108  
   109  var TestImageMetadata = []*imagemetadata.ImageMetadata{
   110  	// LTS-dependent requires new entries upon new LTS release.
   111  	// 16.04:amd64
   112  	makeImage("ami-00000133", "ssd", "hvm", "amd64", "16.04", "test"),
   113  	makeImage("ami-00000139", "ebs", "hvm", "amd64", "16.04", "test"),
   114  	makeImage("ami-00000135", "ssd", "pv", "amd64", "16.04", "test"),
   115  
   116  	// 14.04:amd64
   117  	makeImage("ami-00000033", "ssd", "hvm", "amd64", "14.04", "test"),
   118  
   119  	// 14.04:i386
   120  	makeImage("ami-00000034", "ssd", "pv", "i386", "14.04", "test"),
   121  
   122  	// 12.10:amd64
   123  	makeImage("ami-01000035", "ssd", "hvm", "amd64", "12.10", "test"),
   124  
   125  	// 12.10:i386
   126  	makeImage("ami-01000034", "ssd", "hvm", "i386", "12.10", "test"),
   127  
   128  	// 13.04:i386
   129  	makeImage("ami-02000034", "ssd", "hvm", "i386", "13.04", "test"),
   130  	makeImage("ami-02000035", "ssd", "pv", "i386", "13.04", "test"),
   131  }
   132  
   133  func MakeTestImageStreamsData(region aws.Region) map[string]string {
   134  	testImageMetadataIndex := strings.Replace(testImageMetadataIndex, "$REGION", region.Name, -1)
   135  	testImageMetadataIndex = strings.Replace(testImageMetadataIndex, "$ENDPOINT", region.EC2Endpoint, -1)
   136  	return map[string]string{
   137  		"/streams/v1/index.json":                         testImageMetadataIndex,
   138  		"/streams/v1/com.ubuntu.cloud:released:aws.json": testImageMetadataProduct,
   139  	}
   140  }
   141  
   142  // LTS-dependent requires new/updated entries upon new LTS release.
   143  const testImageMetadataIndex = `
   144  {
   145   "index": {
   146    "com.ubuntu.cloud:released": {
   147     "updated": "Wed, 01 May 2013 13:31:26 +0000",
   148     "clouds": [
   149      {
   150       "region": "$REGION",
   151       "endpoint": "$ENDPOINT"
   152      }
   153     ],
   154     "cloudname": "aws",
   155     "datatype": "image-ids",
   156     "format": "products:1.0",
   157     "products": [
   158      "com.ubuntu.cloud:server:16.04:amd64",
   159      "com.ubuntu.cloud:server:14.04:amd64",
   160      "com.ubuntu.cloud:server:14.04:i386",
   161      "com.ubuntu.cloud:server:12.10:i386",
   162      "com.ubuntu.cloud:server:13.04:i386"
   163     ],
   164     "path": "streams/v1/com.ubuntu.cloud:released:aws.json"
   165    }
   166   },
   167   "updated": "Wed, 01 May 2013 13:31:26 +0000",
   168   "format": "index:1.0"
   169  }
   170  `
   171  const testImageMetadataProduct = `
   172  {
   173   "content_id": "com.ubuntu.cloud:released:aws",
   174   "products": {
   175     "com.ubuntu.cloud:server:16.04:amd64": {
   176       "release": "trusty",
   177       "version": "16.04",
   178       "arch": "amd64",
   179       "versions": {
   180         "20121218": {
   181           "items": {
   182             "usee1pi": {
   183               "root_store": "instance",
   184               "virt": "pv",
   185               "region": "us-east-1",
   186               "id": "ami-00000111"
   187             },
   188             "usww1pe": {
   189               "root_store": "ssd",
   190               "virt": "pv",
   191               "region": "eu-west-1",
   192               "id": "ami-00000116"
   193             },
   194             "apne1pe": {
   195               "root_store": "ssd",
   196               "virt": "pv",
   197               "region": "ap-northeast-1",
   198               "id": "ami-00000126"
   199             },
   200             "apne1he": {
   201               "root_store": "ssd",
   202               "virt": "hvm",
   203               "region": "ap-northeast-1",
   204               "id": "ami-00000187"
   205             },
   206             "test1peebs": {
   207               "root_store": "ssd",
   208               "virt": "pv",
   209               "region": "test",
   210               "id": "ami-00000133"
   211             },
   212             "test1pessd": {
   213               "root_store": "ebs",
   214               "virt": "pv",
   215               "region": "test",
   216               "id": "ami-00000139"
   217             },
   218             "test1he": {
   219               "root_store": "ssd",
   220               "virt": "hvm",
   221               "region": "test",
   222               "id": "ami-00000135"
   223             }
   224           },
   225           "pubname": "ubuntu-trusty-16.04-amd64-server-20121218",
   226           "label": "release"
   227         }
   228       }
   229     },
   230     "com.ubuntu.cloud:server:14.04:amd64": {
   231       "release": "trusty",
   232       "version": "14.04",
   233       "arch": "amd64",
   234       "versions": {
   235         "20121218": {
   236           "items": {
   237             "test1peebs": {
   238               "root_store": "ssd",
   239               "virt": "hvm",
   240               "region": "test",
   241               "id": "ami-00000033"
   242  			}
   243           },
   244           "pubname": "ubuntu-trusty-14.04-amd64-server-20121218",
   245           "label": "release"
   246         }
   247       }
   248     },
   249     "com.ubuntu.cloud:server:14.04:i386": {
   250       "release": "trusty",
   251       "version": "14.04",
   252       "arch": "i386",
   253       "versions": {
   254         "20121218": {
   255           "items": {
   256             "test1pe": {
   257               "root_store": "ssd",
   258               "virt": "pv",
   259               "region": "test",
   260               "id": "ami-00000034"
   261             }
   262           },
   263           "pubname": "ubuntu-trusty-14.04-i386-server-20121218",
   264           "label": "release"
   265         }
   266       }
   267     },
   268     "com.ubuntu.cloud:server:12.10:amd64": {
   269       "release": "quantal",
   270       "version": "12.10",
   271       "arch": "amd64",
   272       "versions": {
   273         "20121218": {
   274           "items": {
   275             "usee1pi": {
   276               "root_store": "instance",
   277               "virt": "pv",
   278               "region": "us-east-1",
   279               "id": "ami-00000011"
   280             },
   281             "usww1pe": {
   282               "root_store": "ssd",
   283               "virt": "pv",
   284               "region": "eu-west-1",
   285               "id": "ami-01000016"
   286             },
   287             "apne1pe": {
   288               "root_store": "ssd",
   289               "virt": "pv",
   290               "region": "ap-northeast-1",
   291               "id": "ami-01000026"
   292             },
   293             "apne1he": {
   294               "root_store": "ssd",
   295               "virt": "hvm",
   296               "region": "ap-northeast-1",
   297               "id": "ami-01000087"
   298             },
   299             "test1he": {
   300               "root_store": "ssd",
   301               "virt": "hvm",
   302               "region": "test",
   303               "id": "ami-01000035"
   304             }
   305           },
   306           "pubname": "ubuntu-quantal-12.10-amd64-server-20121218",
   307           "label": "release"
   308         }
   309       }
   310     },
   311     "com.ubuntu.cloud:server:12.10:i386": {
   312       "release": "quantal",
   313       "version": "12.10",
   314       "arch": "i386",
   315       "versions": {
   316         "20121218": {
   317           "items": {
   318             "test1pe": {
   319               "root_store": "ssd",
   320               "virt": "pv",
   321               "region": "test",
   322               "id": "ami-01000034"
   323             },
   324             "apne1pe": {
   325               "root_store": "ssd",
   326               "virt": "pv",
   327               "region": "ap-northeast-1",
   328               "id": "ami-01000023"
   329             }
   330           },
   331           "pubname": "ubuntu-quantal-12.10-i386-server-20121218",
   332           "label": "release"
   333         }
   334       }
   335     },
   336     "com.ubuntu.cloud:server:13.04:i386": {
   337       "release": "raring",
   338       "version": "13.04",
   339       "arch": "i386",
   340       "versions": {
   341         "20121218": {
   342           "items": {
   343             "test1pe": {
   344               "root_store": "ssd",
   345               "virt": "pv",
   346               "region": "test",
   347               "id": "ami-02000034"
   348             }
   349           },
   350           "pubname": "ubuntu-raring-13.04-i386-server-20121218",
   351           "label": "release"
   352         }
   353       }
   354     }
   355   },
   356   "format": "products:1.0"
   357  }
   358  `