Răsfoiți Sursa

Added missing files

Nuwan Goonasekera 7 ani în urmă
părinte
comite
99ecd6f1d5

+ 5 - 0
cloudbridge/cloud/providers/mock/__init__.py

@@ -0,0 +1,5 @@
+"""
+Exports from this provider
+"""
+
+from .provider import MockAWSCloudProvider  # noqa

+ 100 - 0
cloudbridge/cloud/providers/mock/provider.py

@@ -0,0 +1,100 @@
+"""
+    Provider implementation based on the moto library (mock boto). This mock
+    provider is useful for running tests against cloudbridge but should not
+    be used in tandem with other providers, in particular the AWS provider.
+    This is because instantiating this provider will result in all calls to
+    boto being hijacked, which will cause AWS to malfunction.
+    See notes below.
+"""
+from moto import mock_ec2
+from moto import mock_s3
+
+import responses
+
+from ..aws import AWSCloudProvider
+from ...interfaces.provider import TestMockHelperMixin
+
+
+class MockAWSCloudProvider(AWSCloudProvider, TestMockHelperMixin):
+    """
+    Using this mock driver will result in all boto communications being
+    hijacked. As a result, this mock driver and the AWS driver cannot be used
+    at the same time. Do not instantiate the mock driver if you plan to use
+    the AWS provider within the same python process. Alternatively, call
+    provider.tearDownMock() to stop the hijacking.
+    """
+    PROVIDER_ID = 'mock'
+
+    def __init__(self, config):
+        self.setUpMock()
+        super(MockAWSCloudProvider, self).__init__(config)
+
+    def setUpMock(self):
+        """
+        Let Moto take over all socket communications
+        """
+        self.ec2mock = mock_ec2()
+        self.ec2mock.start()
+        self.s3mock = mock_s3()
+        self.s3mock.start()
+        responses.add(
+            responses.GET,
+            self.AWS_INSTANCE_DATA_DEFAULT_URL,
+            body=u"""
+[
+  {
+    "family": "General Purpose",
+    "enhanced_networking": false,
+    "vCPU": 1,
+    "generation": "current",
+    "ebs_iops": 0,
+    "network_performance": "Low",
+    "ebs_throughput": 0,
+    "vpc": {
+      "ips_per_eni": 2,
+      "max_enis": 2
+    },
+    "arch": [
+      "x86_64"
+    ],
+    "linux_virtualization_types": [
+        "HVM"
+    ],
+    "pricing": {
+        "us-east-1": {
+            "linux": {
+                "ondemand": "0.0058",
+                "reserved": {
+                    "yrTerm1Convertible.allUpfront": "0.003881",
+                    "yrTerm1Convertible.noUpfront": "0.0041",
+                    "yrTerm1Convertible.partialUpfront": "0.003941",
+                    "yrTerm1Standard.allUpfront": "0.003311",
+                    "yrTerm1Standard.noUpfront": "0.0036",
+                    "yrTerm1Standard.partialUpfront": "0.003412",
+                    "yrTerm3Convertible.allUpfront": "0.002626",
+                    "yrTerm3Convertible.noUpfront": "0.0029",
+                    "yrTerm3Convertible.partialUpfront": "0.002632",
+                    "yrTerm3Standard.allUpfront": "0.002169",
+                    "yrTerm3Standard.noUpfront": "0.0025",
+                    "yrTerm3Standard.partialUpfront": "0.002342"
+                }
+            }
+        }
+    },
+    "ebs_optimized": false,
+    "storage": null,
+    "max_bandwidth": 0,
+    "instance_type": "t2.nano",
+    "ECU": "variable",
+    "memory": 0.5,
+    "ebs_max_bandwidth": 0
+  }
+]
+""")
+
+    def tearDownMock(self):
+        """
+        Stop Moto intercepting all socket communications
+        """
+        self.s3mock.stop()
+        self.ec2mock.stop()