def test_resize_other_revisions_created(self):
        def get_instance_group_manager(*args, **kwargs):
            return {
                'currentActions': {
                    'none': 0,
                },
                'name': 'name',
                'targetSize': 0,
            }

        def resize_managed_instance_group(_, name, zone, size):
            self.assertEqual(name, 'name')
            self.assertEqual(zone, 'zone')
            self.assertEqual(size, 4)

        self.mock(
            instance_group_managers.gce.Project,
            'get_instance_group_manager',
            get_instance_group_manager,
        )
        self.mock(
            instance_group_managers.gce.Project,
            'resize_managed_instance_group',
            resize_managed_instance_group,
        )

        key = models.InstanceGroupManager(
            key=instance_group_managers.get_instance_group_manager_key(
                'base-name',
                'revision-1',
                'zone',
            ),
            minimum_size=7,
            maximum_size=7,
            url='https://example.com',
        ).put()
        models.InstanceGroupManager(
            key=instance_group_managers.get_instance_group_manager_key(
                'base-name',
                'revision-2',
                'zone',
            ),
            instances=[
                ndb.Key(models.Instance, 'instance-name-1'),
                ndb.Key(models.Instance, 'instance-name-2'),
                ndb.Key(models.Instance, 'instance-name-3'),
            ],
        ).put()
        models.InstanceTemplateRevision(
            key=key.parent(),
            project='fake-project',
        ).put()
        models.InstanceTemplate(key=key.parent().parent()).put()

        instance_group_managers.resize(key)
예제 #2
0
  def test_active_instances(self):
    """Ensures nothing happens when there are active Instances."""
    key = models.InstanceGroupManager(
        key=instance_group_managers.get_instance_group_manager_key(
            'base-name',
            'revision',
            'zone',
        ),
        instances=[
            ndb.Key(models.Instance, 'fake-key'),
        ],
    ).put()
    models.InstanceTemplateRevision(
        key=key.parent(),
        drained=[
            key,
        ],
    ).put()
    models.InstanceTemplate(
        key=key.parent().parent(),
        active=key.parent(),
    ).put()

    future = cleanup.delete_instance_group_manager(key)
    future.wait()

    self.failUnless(key.get())
예제 #3
0
  def test_url_specified(self):
    """Ensures nothing happens when the entity still has a URL."""
    key = models.InstanceGroupManager(
        key=instance_group_managers.get_instance_group_manager_key(
            'base-name',
            'revision',
            'zone',
        ),
        url='url',
    ).put()
    models.InstanceTemplateRevision(
        key=key.parent(),
        drained=[
            key,
        ],
    ).put()
    models.InstanceTemplate(
        key=key.parent().parent(),
        active=key.parent(),
    ).put()

    future = cleanup.delete_instance_group_manager(key)
    future.wait()

    self.failUnless(key.get())
  def test_implicitly_drained(self):
    """Ensures implicitly drained entities are returned."""
    key = models.InstanceGroupManager(
        key=instance_group_managers.get_instance_group_manager_key(
            'base-name',
            'revision',
            'zone',
        ),
    ).put()
    models.InstanceTemplateRevision(
        key=key.parent(),
        active=[
            key,
        ],
    ).put()
    models.InstanceTemplate(
        key=key.parent().parent(),
        drained=[
            key.parent(),
        ],
    ).put()
    expected_keys = [
        key,
    ]

    self.assertItemsEqual(
        instance_group_managers.get_drained_instance_group_managers(),
        expected_keys,
    )
예제 #5
0
    def test_active_instances(self):
        """Ensures nothing happens when there are active Instances."""
        key = models.InstanceGroupManager(
            key=instance_group_managers.get_instance_group_manager_key(
                'base-name',
                'revision',
                'zone',
            ),
            instances=[
                ndb.Key(models.Instance, 'fake-key'),
            ],
        ).put()
        models.InstanceTemplateRevision(
            key=key.parent(),
            drained=[
                key,
            ],
        ).put()
        models.InstanceTemplate(
            key=key.parent().parent(),
            active=key.parent(),
        ).put()

        future = cleanup.delete_instance_group_manager(key)
        future.wait()

        self.failUnless(key.get())
  def test_updates_when_already_created(self):
    """Ensures an instance group manager is updated when already created."""
    def create_instance_group_manager(*args, **kwargs):
      raise net.Error('', 409, '')
    def get_instance_group_manager(*args, **kwargs):
      return {'selfLink': 'url'}
    self.mock(
        instance_group_managers.gce.Project,
        'create_instance_group_manager',
        create_instance_group_manager,
    )
    self.mock(
        instance_group_managers.gce.Project,
        'get_instance_group_manager',
        get_instance_group_manager,
    )

    key = models.InstanceGroupManager(
        key=instance_group_managers.get_instance_group_manager_key(
            'base-name',
            'revision',
            'zone',
        ),
        minimum_size=2,
    ).put()
    models.InstanceTemplateRevision(
        key=key.parent(),
        project='project',
        url='instance-template-url',
    ).put()
    expected_url = 'url'

    instance_group_managers.create(key)
    self.assertEqual(key.get().url, expected_url)
  def test_doesnt_update_when_creation_fails(self):
    """Ensures an instance group manager is not updated when creation fails."""
    def create_instance_group_manager(*args, **kwargs):
      raise net.Error('', 400, '')
    self.mock(
        instance_group_managers.gce.Project,
        'create_instance_group_manager',
        create_instance_group_manager,
    )

    key = models.InstanceGroupManager(
        key=instance_group_managers.get_instance_group_manager_key(
            'base-name',
            'revision',
            'zone',
        ),
        minimum_size=2,
    ).put()
    models.InstanceTemplateRevision(
        key=key.parent(),
        project='project',
        url='instance-template-url',
    ).put()

    self.assertRaises(net.Error, instance_group_managers.create, key)
    self.failIf(key.get().url)
    def test_no_project(self):
        def get_instance_group_manager(*args, **kwargs):
            self.fail('get_instance_group_manager called')

        def resize_managed_instance_group(*args, **kwargs):
            self.fail('resize_managed_instance_group called')

        self.mock(
            instance_group_managers.gce.Project,
            'get_instance_group_manager',
            get_instance_group_manager,
        )
        self.mock(
            instance_group_managers.gce.Project,
            'resize_managed_instance_group',
            resize_managed_instance_group,
        )

        key = models.InstanceGroupManager(
            key=instance_group_managers.get_instance_group_manager_key(
                'base-name',
                'revision',
                'zone',
            ),
            minimum_size=10,
            maximum_size=10,
            url='https://example.com',
        ).put()
        models.InstanceTemplateRevision(key=key.parent(), ).put()
        models.InstanceTemplate(key=key.parent().parent()).put()

        instance_group_managers.resize(key)
예제 #9
0
  def test_deletes_implicitly_drained(self):
    """Ensures an implicitly drained entity is deleted."""
    key = models.InstanceGroupManager(
        key=instance_group_managers.get_instance_group_manager_key(
            'base-name',
            'revision',
            'zone',
        ),
    ).put()
    models.InstanceTemplateRevision(
        key=key.parent(),
        drained=[
            ndb.Key(models.InstanceGroupManager, 'fake-key-1'),
            key,
            ndb.Key(models.InstanceGroupManager, 'fake-key-2'),
        ],
    ).put()
    models.InstanceTemplate(
        key=key.parent().parent(),
        drained=[
            key.parent(),
        ],
    ).put()
    expected_drained = [
        ndb.Key(models.InstanceGroupManager, 'fake-key-1'),
        ndb.Key(models.InstanceGroupManager, 'fake-key-2'),
    ]

    future = cleanup.delete_instance_group_manager(key)
    future.wait()

    self.failIf(key.get())
    self.assertItemsEqual(key.parent().get().drained, expected_drained)
  def test_creates(self):
    """Ensures an instance group manager is created."""
    def create_instance_group_manager(*args, **kwargs):
      return {'targetLink': 'url'}
    self.mock(
        instance_group_managers.gce.Project,
        'create_instance_group_manager',
        create_instance_group_manager,
    )

    key = models.InstanceGroupManager(
        key=instance_group_managers.get_instance_group_manager_key(
            'base-name',
            'revision',
            'zone',
        ),
        minimum_size=2,
    ).put()
    models.InstanceTemplateRevision(
        key=key.parent(),
        project='project',
        url='instance-template-url',
    ).put()
    expected_url = 'url'

    instance_group_managers.create(key)
    self.assertEqual(key.get().url, expected_url)
예제 #11
0
  def test_instances_with_page_token(self):
    """Ensures all instances are returned."""
    def get_instances_in_instance_group(*args, **kwargs):
      if kwargs.get('page_token'):
        return {
            'items': [
                {'instance': 'url/instance-2'},
            ],
        }
      return {
          'items': [
              {'instance': 'url/instance-1'},
          ],
          'nextPageToken': 'page-token',
      }
    self.mock(
        instances.gce.Project,
        'get_instances_in_instance_group',
        get_instances_in_instance_group,
    )

    key = models.InstanceGroupManager(
        key=instance_group_managers.get_instance_group_manager_key(
            'base-name',
            'revision',
            'zone',
        ),
        url='url',
    ).put()
    models.InstanceTemplateRevision(key=key.parent(), project='project').put()
    expected_urls = ['url/instance-1', 'url/instance-2']

    urls = instances.fetch(key)
    self.assertItemsEqual(urls, expected_urls)
    def test_creates(self):
        """Ensures an instance group manager is created."""
        def create_instance_group_manager(*args, **kwargs):
            return {'targetLink': 'url'}

        self.mock(
            instance_group_managers.gce.Project,
            'create_instance_group_manager',
            create_instance_group_manager,
        )

        key = models.InstanceGroupManager(
            key=instance_group_managers.get_instance_group_manager_key(
                'base-name',
                'revision',
                'zone',
            ),
            minimum_size=2,
            maximum_size=2,
        ).put()
        models.InstanceTemplateRevision(
            key=key.parent(),
            project='project',
            url='instance-template-url',
        ).put()
        expected_url = 'url'

        instance_group_managers.create(key)
        self.assertEqual(key.get().url, expected_url)
예제 #13
0
    def test_url_specified(self):
        """Ensures nothing happens when the entity still has a URL."""
        key = models.InstanceGroupManager(
            key=instance_group_managers.get_instance_group_manager_key(
                'base-name',
                'revision',
                'zone',
            ),
            url='url',
        ).put()
        models.InstanceTemplateRevision(
            key=key.parent(),
            drained=[
                key,
            ],
        ).put()
        models.InstanceTemplate(
            key=key.parent().parent(),
            active=key.parent(),
        ).put()

        future = cleanup.delete_instance_group_manager(key)
        future.wait()

        self.failUnless(key.get())
    def test_doesnt_update_when_creation_fails(self):
        """Ensures an instance group manager is not updated when creation fails."""
        def create_instance_group_manager(*args, **kwargs):
            raise net.Error('', 400, '')

        self.mock(
            instance_group_managers.gce.Project,
            'create_instance_group_manager',
            create_instance_group_manager,
        )

        key = models.InstanceGroupManager(
            key=instance_group_managers.get_instance_group_manager_key(
                'base-name',
                'revision',
                'zone',
            ),
            minimum_size=2,
            maximum_size=2,
        ).put()
        models.InstanceTemplateRevision(
            key=key.parent(),
            project='project',
            url='instance-template-url',
        ).put()

        self.assertRaises(net.Error, instance_group_managers.create, key)
        self.failIf(key.get().url)
예제 #15
0
    def test_deletes_implicitly_drained(self):
        """Ensures an implicitly drained entity is deleted."""
        key = models.InstanceGroupManager(
            key=instance_group_managers.get_instance_group_manager_key(
                'base-name',
                'revision',
                'zone',
            ), ).put()
        models.InstanceTemplateRevision(
            key=key.parent(),
            active=[
                ndb.Key(models.InstanceGroupManager, 'fake-key-1'),
                key,
                ndb.Key(models.InstanceGroupManager, 'fake-key-2'),
            ],
        ).put()
        models.InstanceTemplate(
            key=key.parent().parent(),
            drained=[
                key.parent(),
            ],
        ).put()
        expected_active = [
            ndb.Key(models.InstanceGroupManager, 'fake-key-1'),
            ndb.Key(models.InstanceGroupManager, 'fake-key-2'),
        ]

        future = cleanup.delete_instance_group_manager(key)
        future.wait()

        self.failIf(key.get())
        self.assertItemsEqual(key.parent().get().active, expected_active)
    def test_implicitly_drained(self):
        """Ensures implicitly drained entities are returned."""
        key = models.InstanceGroupManager(
            key=instance_group_managers.get_instance_group_manager_key(
                'base-name',
                'revision',
                'zone',
            ), ).put()
        models.InstanceTemplateRevision(
            key=key.parent(),
            active=[
                key,
            ],
        ).put()
        models.InstanceTemplate(
            key=key.parent().parent(),
            drained=[
                key.parent(),
            ],
        ).put()
        expected_keys = [
            key,
        ]

        self.assertItemsEqual(
            instance_group_managers.get_drained_instance_group_managers(),
            expected_keys,
        )
    def test_several_instance_group_manager(self):
        models.InstanceGroupManager(
            key=instance_group_managers.get_instance_group_manager_key(
                'base-name-1',
                'revision',
                'zone-a',
            ),
            instances=[
                ndb.Key(models.Instance, 'fake-key-1'),
                ndb.Key(models.Instance, 'fake-key-2'),
            ],
        ).put()
        models.InstanceGroupManager(
            key=instance_group_managers.get_instance_group_manager_key(
                'base-name-1',
                'revision',
                'zone-b',
            ),
            instances=[
                ndb.Key(models.Instance, 'fake-key-3'),
            ],
        ).put()
        models.InstanceGroupManager(
            key=instance_group_managers.get_instance_group_manager_key(
                'base-name-2',
                'revision',
                'zone',
            ),
            instances=[
                ndb.Key(models.Instance, 'fake-key-4'),
            ],
        ).put()
        models.InstanceGroupManager(
            key=instance_group_managers.get_instance_group_manager_key(
                'base-name-3',
                'revision',
                'zone',
            ), ).put()
        expected = {'base-name-1': 3, 'base-name-2': 1, 'base-name-3': 0}

        actual = instance_group_managers.count_instances()
        self.assertEqual(actual, expected)
    def test_nothing_active_or_drained(self):
        """Ensures nothing is returned when there are no active/drained entities."""
        models.InstanceGroupManager(
            key=instance_group_managers.get_instance_group_manager_key(
                'base-name',
                'revision',
                'zone',
            ), ).put()

        self.failIf(
            instance_group_managers.get_drained_instance_group_managers())
예제 #19
0
    def test_url_unspecified(self):
        """Ensures nothing happens when URL is unspecified."""
        key = models.InstanceGroupManager(
            key=instance_group_managers.get_instance_group_manager_key(
                'base-name',
                'revision',
                'zone',
            ), ).put()

        instances.ensure_entities_exist(key)
        self.failIf(key.get().instances)
    def test_one_instance_group_manager_no_instances(self):
        models.InstanceGroupManager(
            key=instance_group_managers.get_instance_group_manager_key(
                'base-name',
                'revision',
                'zone',
            ), ).put()
        expected = {'base-name': 0}

        actual = instance_group_managers.count_instances()
        self.assertEqual(actual, expected)
    def test_parent_doesnt_exist(self):
        """Ensures nothing happens when the parent doesn't exist."""
        key = models.InstanceGroupManager(
            key=instance_group_managers.get_instance_group_manager_key(
                'base-name',
                'revision',
                'zone',
            ), ).put()

        instance_group_managers.create(key)
        self.failIf(key.get().url)
  def test_nothing_active_or_drained(self):
    """Ensures nothing is returned when there are no active/drained entities."""
    models.InstanceGroupManager(
        key=instance_group_managers.get_instance_group_manager_key(
            'base-name',
            'revision',
            'zone',
        ),
    ).put()

    self.failIf(instance_group_managers.get_drained_instance_group_managers())
    def test_url_unspecified(self):
        """Ensures no URL when URL is unspecified."""
        key = models.InstanceGroupManager(
            key=instance_group_managers.get_instance_group_manager_key(
                'base-name',
                'revision',
                'zone',
            ), ).put()

        self.failIf(
            instance_group_managers.get_instance_group_manager_to_delete(key))
예제 #24
0
def get_instance_group_manager_key(key):
    """Returns a key for the InstanceGroupManager the given Instance belongs to.

  Args:
    key: ndb.Key for a models.Instance.

  Returns:
    ndb.Key for a models.InstanceGroupManager entity.
  """
    return instance_group_managers.get_instance_group_manager_key(
        *key.id().split()[:-1])
    def test_parent_project_unspecified(self):
        """Ensures nothing happens when parent doesn't specify project."""
        key = models.InstanceGroupManager(
            key=instance_group_managers.get_instance_group_manager_key(
                'base-name',
                'revision',
                'zone',
            ), ).put()
        models.InstanceTemplateRevision(key=key.parent(), url='url').put()

        instance_group_managers.create(key)
        self.failIf(key.get().url)
  def test_url_unspecified(self):
    """Ensures no URL when URL is unspecified."""
    key = models.InstanceGroupManager(
        key=instance_group_managers.get_instance_group_manager_key(
            'base-name',
            'revision',
            'zone',
        ),
    ).put()

    self.failIf(
        instance_group_managers.get_instance_group_manager_to_delete(key))
  def test_parent_doesnt_exist(self):
    """Ensures nothing happens when the parent doesn't exist."""
    key = models.InstanceGroupManager(
        key=instance_group_managers.get_instance_group_manager_key(
            'base-name',
            'revision',
            'zone',
        ),
    ).put()

    instance_group_managers.create(key)
    self.failIf(key.get().url)
    def test_url_updated(self):
        """Ensures the URL is updated."""
        key = models.InstanceGroupManager(
            key=instance_group_managers.get_instance_group_manager_key(
                'base-name',
                'revision',
                'zone',
            ), ).put()

        instance_group_managers.update_url(key, 'url')

        self.assertEqual(key.get().url, 'url')
  def test_instance_template_revision_missing(self):
    """Ensures no task is enqueued for missing instance template revisions."""
    key = instance_group_managers.get_instance_group_manager_key(
        'base-name', 'revision', 'zone')
    models.InstanceTemplate(
        key=key.parent().parent(),
        active=key.parent(),
    ).put()
    models.InstanceGroupManager(key=key).put()

    instance_group_managers.schedule_creation()

    self.failIf(key.get().url)
예제 #30
0
  def test_url_unspecified(self):
    """Ensures nothing happens when URL is unspecified."""
    key = models.InstanceGroupManager(
        key=instance_group_managers.get_instance_group_manager_key(
            'base-name',
            'revision',
            'zone',
        ),
    ).put()
    models.InstanceTemplateRevision(key=key.parent(), project='project').put()

    urls= instances.fetch(key)
    self.failIf(urls)
  def test_parent_url_unspecified(self):
    """Ensures nothing happens when parent doesn't specify URL."""
    key = models.InstanceGroupManager(
        key=instance_group_managers.get_instance_group_manager_key(
            'base-name',
            'revision',
            'zone',
        ),
    ).put()
    models.InstanceTemplateRevision(key=key.parent(), project='project').put()

    instance_group_managers.create(key)
    self.failIf(key.get().url)
    def test_instance_template_revision_missing(self):
        """Ensures no task is enqueued for missing instance template revisions."""
        key = instance_group_managers.get_instance_group_manager_key(
            'base-name', 'revision', 'zone')
        models.InstanceTemplate(
            key=key.parent().parent(),
            active=key.parent(),
        ).put()
        models.InstanceGroupManager(key=key).put()

        instance_group_managers.schedule_creation()

        self.failIf(key.get().url)
  def test_url_specified(self):
    """Ensures nothing happens when URL is already specified."""
    key = models.InstanceGroupManager(
        key=instance_group_managers.get_instance_group_manager_key(
            'base-name',
            'revision',
            'zone',
        ),
        url='url',
    ).put()
    expected_url = 'url'

    instance_group_managers.create(key)
    self.assertEqual(key.get().url, expected_url)
    def test_url_specified(self):
        """Ensures nothing happens when URL is already specified."""
        key = models.InstanceGroupManager(
            key=instance_group_managers.get_instance_group_manager_key(
                'base-name',
                'revision',
                'zone',
            ),
            url='url',
        ).put()
        expected_url = 'url'

        instance_group_managers.create(key)
        self.assertEqual(key.get().url, expected_url)
    def test_url_mismatch(self):
        """Ensures the URL is updated when it doesn't match."""
        key = models.InstanceGroupManager(
            key=instance_group_managers.get_instance_group_manager_key(
                'base-name',
                'revision',
                'zone',
            ),
            url='old-url',
        ).put()

        instance_group_managers.update_url(key, 'new-url')

        self.assertEqual(key.get().url, 'new-url')
    def test_url_matches(self):
        """Ensures nothing happens when the URL already matches."""
        key = models.InstanceGroupManager(
            key=instance_group_managers.get_instance_group_manager_key(
                'base-name',
                'revision',
                'zone',
            ),
            url='url',
        ).put()

        instance_group_managers.update_url(key, 'url')

        self.assertEqual(key.get().url, 'url')
  def test_instances(self):
    """Ensures no URL when there are active instances."""
    key = models.InstanceGroupManager(
        key=instance_group_managers.get_instance_group_manager_key(
            'base-name',
            'revision',
            'zone',
        ),
        instances=[
            ndb.Key(models.Instance, 'fake-key'),
        ],
        url='url',
    ).put()

    self.failIf(
        instance_group_managers.get_instance_group_manager_to_delete(key))
  def test_returns_url(self):
    """Ensures URL is returned."""
    key = models.InstanceGroupManager(
        key=instance_group_managers.get_instance_group_manager_key(
            'base-name',
            'revision',
            'zone',
        ),
        url='url',
    ).put()
    expected_url = 'url'

    self.assertEqual(
        instance_group_managers.get_instance_group_manager_to_delete(key),
        expected_url,
    )
    def test_instances(self):
        """Ensures no URL when there are active instances."""
        key = models.InstanceGroupManager(
            key=instance_group_managers.get_instance_group_manager_key(
                'base-name',
                'revision',
                'zone',
            ),
            instances=[
                ndb.Key(models.Instance, 'fake-key'),
            ],
            url='url',
        ).put()

        self.failIf(
            instance_group_managers.get_instance_group_manager_to_delete(key))
    def test_returns_url(self):
        """Ensures URL is returned."""
        key = models.InstanceGroupManager(
            key=instance_group_managers.get_instance_group_manager_key(
                'base-name',
                'revision',
                'zone',
            ),
            url='url',
        ).put()
        expected_url = 'url'

        self.assertEqual(
            instance_group_managers.get_instance_group_manager_to_delete(key),
            expected_url,
        )
    def test_one_instance_group_manager(self):
        models.InstanceGroupManager(
            key=instance_group_managers.get_instance_group_manager_key(
                'base-name',
                'revision',
                'zone',
            ),
            instances=[
                ndb.Key(models.Instance, 'fake-key-1'),
                ndb.Key(models.Instance, 'fake-key-2'),
            ],
        ).put()
        expected = {'base-name': 2}

        actual = instance_group_managers.count_instances()
        self.assertEqual(actual, expected)
예제 #42
0
    def test_equal(self):
        expected = instance_group_managers.get_instance_group_manager_key(
            'base-name',
            'revision',
            'zone',
        )

        key = instances.get_instance_key(
            'base-name',
            'revision',
            'zone',
            'instance-name',
        )

        self.assertEqual(instances.get_instance_group_manager_key(key),
                         expected)
    def test_active_only(self):
        """Ensures nothing is returned when there are only active entities."""
        key = models.InstanceGroupManager(
            key=instance_group_managers.get_instance_group_manager_key(
                'base-name',
                'revision',
                'zone',
            ), ).put()
        models.InstanceTemplateRevision(
            key=key.parent(),
            active=[
                key,
            ],
        ).put()

        self.failIf(
            instance_group_managers.get_drained_instance_group_managers())
  def test_instance_group_manager_inactive(self):
    """Ensures no task is enqueued for inactive instance group managers."""
    key = instance_group_managers.get_instance_group_manager_key(
        'base-name', 'revision', 'zone')
    models.InstanceTemplate(
        key=key.parent().parent(),
        active=key.parent(),
    ).put()
    models.InstanceTemplateRevision(
        key=key.parent(),
        url='url',
    ).put()
    models.InstanceGroupManager(key=key).put()

    instance_group_managers.schedule_creation()

    self.failIf(key.get().url)
  def test_active_only(self):
    """Ensures nothing is returned when there are only active entities."""
    key = models.InstanceGroupManager(
        key=instance_group_managers.get_instance_group_manager_key(
            'base-name',
            'revision',
            'zone',
        ),
    ).put()
    models.InstanceTemplateRevision(
        key=key.parent(),
        active=[
            key,
        ],
    ).put()

    self.failIf(instance_group_managers.get_drained_instance_group_managers())
    def test_instance_group_manager_inactive(self):
        """Ensures no task is enqueued for inactive instance group managers."""
        key = instance_group_managers.get_instance_group_manager_key(
            'base-name', 'revision', 'zone')
        models.InstanceTemplate(
            key=key.parent().parent(),
            active=key.parent(),
        ).put()
        models.InstanceTemplateRevision(
            key=key.parent(),
            url='url',
        ).put()
        models.InstanceGroupManager(key=key).put()

        instance_group_managers.schedule_creation()

        self.failIf(key.get().url)
  def test_deletes(self):
    """Ensures an instance group manager is deleted."""
    def json_request(url, *args, **kwargs):
      return {'targetLink': url}
    self.mock(instance_group_managers.net, 'json_request', json_request)

    key = models.InstanceGroupManager(
        key=instance_group_managers.get_instance_group_manager_key(
            'base-name',
            'revision',
            'zone',
        ),
        url='url',
    ).put()

    instance_group_managers.delete(key)
    self.failIf(key.get().url)
  def test_url_not_found(self):
    """Ensures URL is updated when the instance group manager is not found."""
    def json_request(url, *args, **kwargs):
      raise net.Error('', 404, '')
    self.mock(instance_group_managers.net, 'json_request', json_request)

    key = models.InstanceGroupManager(
        key=instance_group_managers.get_instance_group_manager_key(
            'base-name',
            'revision',
            'zone',
        ),
        url='url',
    ).put()

    instance_group_managers.delete(key)
    self.failIf(key.get().url)
예제 #49
0
  def test_parent_doesnt_exist(self):
    """Ensures nothing happens when the parent doesn't exist."""
    key = models.InstanceGroupManager(
        key=instance_group_managers.get_instance_group_manager_key(
            'base-name',
            'revision',
            'zone',
        ),
    ).put()
    models.InstanceTemplate(
        key=key.parent().parent(),
        active=key.parent(),
    ).put()

    future = cleanup.delete_instance_group_manager(key)
    future.wait()

    self.failUnless(key.get())
예제 #50
0
def get_instance_key(base_name, revision, zone, instance_name):
  """Returns a key for an Instance.

  Args:
    base_name: Base name for the models.InstanceTemplate.
    revision: Revision string for the models.InstanceTemplateRevision.
    zone: Zone for the models.InstanceGroupManager.
    instance_name: Name of the models.Instance.

  Returns:
    ndb.Key for a models.InstanceTemplate entity.
  """
  return ndb.Key(
      models.Instance,
      instance_name,
      parent=instance_group_managers.get_instance_group_manager_key(
          base_name, revision, zone),
  )
  def test_deletion_fails(self):
    """Ensures nothing happens when instance group manager deletion fails."""
    def json_request(url, *args, **kwargs):
      raise net.Error('', 400, '')
    self.mock(instance_group_managers.net, 'json_request', json_request)

    key = models.InstanceGroupManager(
        key=instance_group_managers.get_instance_group_manager_key(
            'base-name',
            'revision',
            'zone',
        ),
        url='url',
    ).put()
    expected_url = 'url'

    self.assertRaises(net.Error, instance_group_managers.delete, key)
    self.assertEqual(key.get().url, expected_url)
  def test_instance_group_manager_already_created(self):
    """Ensures no task is enqueued for existing instance group managers."""
    key = instance_group_managers.get_instance_group_manager_key(
        'base-name', 'revision', 'zone')
    models.InstanceTemplate(
        key=key.parent().parent(),
        active=key.parent(),
    ).put()
    models.InstanceTemplateRevision(
        key=key.parent(),
        active=[
            key,
        ],
        url='instance-template-url',
    ).put()
    models.InstanceGroupManager(key=key, url='url').put()
    expected_url = 'url'

    instance_group_managers.schedule_creation()

    self.assertEqual(key.get().url, expected_url)
  def test_enqueues_task(self):
    """Ensures a task is enqueued."""
    key = instance_group_managers.get_instance_group_manager_key(
        'base-name', 'revision', 'zone')
    models.InstanceTemplate(
        key=key.parent().parent(),
        active=key.parent(),
    ).put()
    models.InstanceTemplateRevision(
        key=key.parent(),
        active=[
            key,
        ],
        url='url',
    ).put()
    models.InstanceGroupManager(key=key).put()
    expected_url = key.urlsafe()

    instance_group_managers.schedule_creation()

    self.assertEqual(key.get().url, expected_url)