Explorar o código

Used route53 mocks and skip waiting when mock

Nuwan Goonasekera %!s(int64=6) %!d(string=hai) anos
pai
achega
048ebb909f

+ 20 - 6
cloudbridge/providers/aws/services.py

@@ -1343,6 +1343,14 @@ class AWSDnsZoneService(BaseDnsZoneService):
             return AWSDnsZone(self.provider, dns_zone.get('HostedZone'))
         except self.provider.dns.client.exceptions.NoSuchHostedZone:
             return None
+        except ClientError as exc:
+            error_code = exc.response['Error']['Code']
+            if any(status in error_code for status in
+                   ('NotFound', 'InvalidParameterValue', 'Malformed', '404')):
+                log.debug("Object not found: %s", dns_zone_id)
+                return None
+            else:
+                raise exc
 
     @dispatch(event="provider.dns.host_zones.list",
               priority=BaseDnsZoneService.STANDARD_EVENT_PRIORITY)
@@ -1459,9 +1467,12 @@ class AWSDnsRecordService(BaseDnsRecordService):
                 }]
             }
         )
-        waiter = self.provider.dns.client.get_waiter(
-            'resource_record_sets_changed')
-        waiter.wait(Id=response.get('ChangeInfo').get('Id'))
+        # FIXME: Since Moto's implementation of route53 doesn't support
+        # waiting, this is skipped for mock tests.
+        if not self.provider.PROVIDER_ID == 'mock':
+            waiter = self.provider.dns.client.get_waiter(
+                'resource_record_sets_changed')
+            waiter.wait(Id=response.get('ChangeInfo').get('Id'))
         return self.get(dns_zone, name + ":" + type)
 
     def delete(self, dns_zone, record):
@@ -1482,6 +1493,9 @@ class AWSDnsRecordService(BaseDnsRecordService):
                     }
                 }]
             })
-        waiter = self.provider.dns.client.get_waiter(
-            'resource_record_sets_changed')
-        waiter.wait(Id=response.get('ChangeInfo').get('Id'))
+        # FIXME: Since Moto's implementation of route53 doesn't support
+        # waiting, this is skipped for mock tests.
+        if not self.provider.PROVIDER_ID == 'mock':
+            waiter = self.provider.dns.client.get_waiter(
+                'resource_record_sets_changed')
+            waiter.wait(Id=response.get('ChangeInfo').get('Id'))

+ 4 - 0
cloudbridge/providers/mock/provider.py

@@ -7,6 +7,7 @@
     See notes below.
 """
 from moto import mock_ec2
+from moto import mock_route53
 from moto import mock_s3
 
 import responses
@@ -37,6 +38,8 @@ class MockAWSCloudProvider(AWSCloudProvider, TestMockHelperMixin):
         self.ec2mock.start()
         self.s3mock = mock_s3()
         self.s3mock.start()
+        self.route53mock = mock_route53()
+        self.route53mock.start()
         responses.add(
             responses.GET,
             self.AWS_INSTANCE_DATA_DEFAULT_URL,
@@ -98,3 +101,4 @@ class MockAWSCloudProvider(AWSCloudProvider, TestMockHelperMixin):
         """
         self.s3mock.stop()
         self.ec2mock.stop()
+        self.route53mock.stop()