Esempio n. 1
0
def test_connect_zone(mocked_responses, vinyldns_client):
    mocked_responses.add(responses.POST,
                         'http://test.com/zones',
                         body=to_json_string(sample_zone_change),
                         status=200)
    r = vinyldns_client.connect_zone(forward_zone)
    check_zones_are_same(forward_zone, r.zone)
Esempio n. 2
0
def test_list_zone_changes(mocked_responses, vinyldns_client):
    change1 = ZoneChange(zone=forward_zone,
                         user_id='some-user',
                         change_type='Create',
                         status='Pending',
                         created=datetime.utcnow(),
                         system_message=None,
                         id='zone-change-id1')
    change2 = ZoneChange(zone=ip4_zone,
                         user_id='some-user',
                         change_type='Create',
                         status='Pending',
                         created=datetime.utcnow(),
                         system_message='msg',
                         id='zone-change-id2')
    lzcr = ListZoneChangesResponse(forward_zone.id, [change1, change2], 'next',
                                   'start', 100)
    mocked_responses.add(
        responses.GET,
        'http://test.com/zones/{0}/changes?startFrom=start&maxItems=100'.
        format(forward_zone.id),
        body=to_json_string(lzcr),
        status=200)
    r = vinyldns_client.list_zone_changes(forward_zone.id, 'start', 100)
    assert r.start_from == lzcr.start_from
    assert r.next_id == lzcr.next_id
    assert r.max_items == lzcr.max_items
    for l, r in zip(lzcr.zone_changes, r.zone_changes):
        assert l.id == r.id
        assert l.user_id == r.user_id
        assert l.change_type == r.change_type
        assert l.status == r.status
        assert l.created == r.created
        assert l.system_message == r.system_message
        check_zones_are_same(l.zone, r.zone)
Esempio n. 3
0
def test_cancel_batch_change(mocked_responses, vinyldns_client):
    error_message = (
        "Zone Discovery Failed: zone for 'foo.bar.com' does not exist in"
        " VinylDNS. If zone exists, then it must be connected to in VinylDNS.")

    error = ValidationError('ZoneDiscoveryError', error_message)

    arc = AddRecordChange(forward_zone.id, forward_zone.name,
                          'cancel', 'cancel.bar.com', RecordType.A, 200,
                          AData('1.2.3.4'), 'PendingReview', 'id1', [error],
                          'system-message', 'cchangeid1', 'csid1')

    drc = DeleteRecordSetChange(forward_zone.id, forward_zone.name, 'cancel2',
                                'cancel2.bar.com', RecordType.A, 'Complete',
                                'id2', [], 'system-message', 'cchangeid2',
                                'csid2')

    bc = BatchChange('user-id',
                     'user-name',
                     datetime.utcnow(), [arc, drc],
                     'bcid',
                     'Cancelled',
                     'Cancelled',
                     owner_group_id='owner-group-id')

    mocked_responses.add(
        responses.POST,
        'http://test.com/zones/batchrecordchanges/bcid/cancel',
        body=to_json_string(bc),
        status=200)

    c = vinyldns_client.cancel_batch_change('bcid')

    check_batch_changes_are_same(c, bc)
Esempio n. 4
0
def test_abandon_zone(mocked_responses, vinyldns_client):
    mocked_responses.add(responses.DELETE,
                         'http://test.com/zones/{0}'.format(forward_zone.id),
                         body=to_json_string(sample_zone_change),
                         status=200)
    r = vinyldns_client.abandon_zone(forward_zone.id)
    check_zones_are_same(forward_zone, r.zone)
Esempio n. 5
0
def test_approve_batch_change(mocked_responses, vinyldns_client):
    arc = AddRecordChange(forward_zone.id, forward_zone.name,
                          'foo', 'foo.bar.com', RecordType.A, 200,
                          AData('1.2.3.4'), 'PendingReview', 'id1', [],
                          'system-message', 'rchangeid1', 'rsid1')

    drc = DeleteRecordSetChange(forward_zone.id, forward_zone.name, 'baz',
                                'baz.bar.com', RecordType.A, 'PendingReview',
                                'id2', [], 'system-message', 'rchangeid2',
                                'rsid2')

    bc = BatchChange('user-id',
                     'user-name',
                     datetime.utcnow(), [arc, drc],
                     'bcid',
                     'Complete',
                     'ManuallyApproved',
                     comments='batch change test',
                     owner_group_id='owner-group-id',
                     reviewer_id='admin-id',
                     reviewer_user_name='admin',
                     review_comment='looks good',
                     review_timestamp=datetime.utcnow())

    mocked_responses.add(
        responses.POST,
        'http://test.com/zones/batchrecordchanges/bcid/approve',
        body=to_json_string(bc),
        status=200)

    r = vinyldns_client.approve_batch_change('bcid', 'looks good')

    check_batch_changes_are_same(r, bc)
Esempio n. 6
0
def test_get_batch_change(mocked_responses, vinyldns_client):
    arc = AddRecordChange(forward_zone.id, forward_zone.name,
                          'foo', 'foo.bar.com', RecordType.A, 200,
                          AData('1.2.3.4'), 'Complete', 'id1', [],
                          'system-message', 'rchangeid1', 'rsid1')

    drc = DeleteRecordSetChange(forward_zone.id, forward_zone.name, 'baz',
                                'baz.bar.com', RecordType.A, 'Complete', 'id2',
                                [], 'system-message', 'rchangeid2', 'rsid2')

    drc_with_data = DeleteRecordSetChange(forward_zone.id, forward_zone.name,
                                          'biz', 'biz.bar.com', RecordType.A,
                                          'Complete', 'id3', [],
                                          'system-message', 'rchangeid3',
                                          'rsid3', AData("5.6.7.8"))

    bc = BatchChange('user-id',
                     'user-name',
                     datetime.utcnow(), [arc, drc, drc_with_data],
                     'bcid',
                     'Complete',
                     'AutoApproved',
                     comments='batch change test',
                     owner_group_id='owner-group-id')

    mocked_responses.add(responses.GET,
                         'http://test.com/zones/batchrecordchanges/bcid',
                         body=to_json_string(bc),
                         status=200)

    r = vinyldns_client.get_batch_change('bcid')

    check_batch_changes_are_same(r, bc)
def test_create_batch_change(mocked_responses, vinyldns_client):
    ar = AddRecord('foo.bar.com', RecordType.A, 100, '1.2.3.4')
    drs = DeleteRecordSet('baz.bar.com', RecordType.A)

    arc = AddRecordChange(forward_zone.id, forward_zone.name, 'foo', 'foo.bar.com', RecordType.A, '1.2.3.4',
                          'Complete', 'id1', 'system-message', 'rchangeid1', 'rsid1')
    drc = DeleteRecordSetChange(forward_zone.id, forward_zone.name, 'baz', 'baz.bar.com', RecordType.A, 'Complete',
                                'id2', 'system-message', 'rchangeid2', 'rsid2')
    bc = BatchChange('user-id', 'user-name', 'batch change test', datetime.utcnow(), [arc, drc], 'bcid')
    mocked_responses.add(
        responses.POST, 'http://test.com/zones/batchrecordchanges',
        body=to_json_string(bc), status=200
    )
    r = vinyldns_client.create_batch_change(
        BatchChangeRequest(
            changes=[ar, drs],
            comments='batch change test'
        ))

    assert r.user_id == bc.user_id
    assert r.user_name == bc.user_name
    assert r.comments == bc.comments
    assert r.created_timestamp == bc.created_timestamp
    assert r.id == bc.id
    for l, r in zip(r.changes, bc.changes):
        check_single_changes_are_same(l, r)
Esempio n. 8
0
def test_get_zone(mocked_responses, vinyldns_client):
    mocked_responses.add(responses.GET,
                         'http://test.com/zones/{0}'.format(forward_zone.id),
                         body=to_json_string({'zone': forward_zone}),
                         status=200)
    r = vinyldns_client.get_zone(forward_zone.id)
    check_zones_are_same(forward_zone, r)
Esempio n. 9
0
def test_delete_acl_rule(mocked_responses, vinyldns_client):
    mocked_responses.add(responses.DELETE,
                         'http://test.com/zones/{0}/acl/rules'.format(
                             forward_zone.id),
                         body=to_json_string(sample_zone_change))
    r = vinyldns_client.delete_zone_acl_rule(forward_zone.id, acl_rule)
    check_zones_are_same(r.zone, sample_zone_change.zone)
Esempio n. 10
0
def test_zone_serdes():
    s = to_json_string(forward_zone)
    print(json.dumps(s, indent=4))
    z = from_json_string(s, Zone.from_dict)

    assert z.name == forward_zone.name
    assert z.connection.primary_server == forward_zone.connection.primary_server
    assert all([a.__dict__ == b.__dict__ for a, b in zip(z.acl.rules, forward_zone.acl.rules)])
Esempio n. 11
0
    def create_batch_change(self, batch_change_input, **kwargs):
        """
        Create a new batch change.

        :param batch_change_input: the batchchange to be created
        :return: the content of the response
        """
        url = urljoin(self.index_url, u'/zones/batchrecordchanges')
        response, data = self.__make_request(url, u'POST', self.headers, to_json_string(batch_change_input), **kwargs)
        return BatchChange.from_dict(data)
Esempio n. 12
0
    def update_zone(self, zone, **kwargs):
        """
        Update a zone.

        :param zone: the zone to be created
        :return: the content of the response
        """
        url = urljoin(self.index_url, u'/zones/{0}'.format(zone.id))
        response, data = self.__make_request(url, u'PUT', self.headers, to_json_string(zone), **kwargs)
        return ZoneChange.from_dict(data)
def test_create_record_set(record_set, mocked_responses, vinyldns_client):
    change = gen_rs_change(record_set)
    mocked_responses.add(responses.POST,
                         'http://test.com/zones/{0}/recordsets'.format(
                             record_set.zone_id),
                         body=to_json_string(change),
                         status=200)
    r = vinyldns_client.create_record_set(record_set)
    check_record_set_changes_are_equal(change, r)
    mocked_responses.reset()
Esempio n. 14
0
    def create_record_set(self, record_set, **kwargs):
        """
        Create a new record_set.

        :param record_set: the record_set to be created
        :return: the content of the response
        """
        url = urljoin(self.index_url, u'/zones/{0}/recordsets'.format(record_set.zone_id))
        response, data = self.__make_request(url, u'POST', self.headers, to_json_string(record_set), **kwargs)
        return RecordSetChange.from_dict(data)
Esempio n. 15
0
    def connect_zone(self, zone, **kwargs):
        """
        Create a new zone with the given name and email.

        :param zone: the zone to be created
        :return: the content of the response
        """
        url = urljoin(self.index_url, u'/zones')
        response, data = self.__make_request(url, u'POST', self.headers, to_json_string(zone), **kwargs)
        return ZoneChange.from_dict(data)
Esempio n. 16
0
    def update_group(self, group, **kwargs):
        """
        Update an existing group, uses the id of the group provided

        :param group: A group to be updated
        :return: the content of the response, which should be a group json
        """
        url = urljoin(self.index_url, u'/groups/{0}'.format(group.id))
        response, data = self.__make_request(url, u'PUT', self.headers, to_json_string(group), **kwargs)

        return Group.from_dict(data)
Esempio n. 17
0
    def create_group(self, group, **kwargs):
        """
        Create a new group.

        :param group: A group dictionary that can be serialized to json
        :return: the content of the response, which should be a group json
        """
        url = urljoin(self.index_url, u'/groups')
        response, data = self.__make_request(url, u'POST', self.headers, to_json_string(group), **kwargs)

        return Group.from_dict(data)
def test_get_record_set(record_set, mocked_responses, vinyldns_client):
    rs = copy.deepcopy(record_set)
    rs.id = rs.name + 'id'
    mocked_responses.add(responses.GET,
                         'http://test.com/zones/{0}/recordsets/{1}'.format(
                             rs.zone_id, rs.id),
                         body=to_json_string(rs),
                         status=200)
    r = vinyldns_client.get_record_set(rs.zone_id, rs.id)
    check_record_sets_are_equal(rs, r)
    mocked_responses.reset()
def test_get_record_set_change(record_set, mocked_responses, vinyldns_client):
    change = gen_rs_change(record_set)
    mocked_responses.add(
        responses.GET,
        'http://test.com/zones/{0}/recordsets/{1}/changes/{2}'.format(
            record_set.zone_id, record_set.id, change.id),
        body=to_json_string(change),
        status=200)
    r = vinyldns_client.get_record_set_change(record_set.zone_id,
                                              record_set.id, change.id)
    check_record_set_changes_are_equal(r, change)
Esempio n. 20
0
def test_sync_zone(mocked_responses, vinyldns_client):
    mocked_responses.add(
        responses.POST, 'http://test.com/zones/{0}/sync'.format(forward_zone.id),
        body=to_json_string(sample_zone_change), status=200)
    r = vinyldns_client.sync_zone(forward_zone.id)
    assert sample_zone_change.id == r.id
    assert sample_zone_change.change_type == r.change_type
    assert sample_zone_change.status == r.status
    assert sample_zone_change.system_message == r.system_message
    assert sample_zone_change.user_id == r.user_id
    check_zones_are_same(forward_zone, r.zone)
Esempio n. 21
0
    def approve_batch_change(self, batch_change_id, approval=None, **kwargs):
        """
        Approve a batch change

        :return: the content of the response
        """
        url = urljoin(self.index_url, '/zones/batchrecordchanges/{0}/approve'.format(batch_change_id),
                      to_json_string(approval))
        response, data = self.__make_request(url, u'POST', self.headers, to_review_json(approval), **kwargs)

        return BatchChange.from_dict(data)
def test_delete_record_set(record_set, mocked_responses, vinyldns_client):
    rs = copy.deepcopy(record_set)
    rs.id = rs.name + 'id'
    change = gen_rs_change(rs)
    mocked_responses.add(responses.DELETE,
                         'http://test.com/zones/{0}/recordsets/{1}'.format(
                             rs.zone_id, rs.id),
                         body=to_json_string(change),
                         status=200)
    r = vinyldns_client.delete_record_set(rs.zone_id, rs.id)
    check_record_set_changes_are_equal(change, r)
    mocked_responses.reset()
Esempio n. 23
0
def test_list_my_groups(mocked_responses, vinyldns_client):
    sample_list_groups = ListGroupsResponse([sample_group, sample_group2], 5, '*', 'start-from', 'next-id')
    mocked_responses.add(
        responses.GET, 'http://test.com/groups?groupNameFilter=*&startFrom=start-from&maxItems=5',
        body=to_json_string(sample_list_groups), status=200)
    r = vinyldns_client.list_my_groups('*', 'start-from', 5)
    assert sample_list_groups.start_from == r.start_from
    assert sample_list_groups.group_name_filter == r.group_name_filter
    assert sample_list_groups.next_id == r.next_id

    for l, r in zip(sample_list_groups.groups, r.groups):
        check_groups_are_same(l, r)
Esempio n. 24
0
def test_list_all_my_groups(mocked_responses, vinyldns_client):
    sample_list_groups1 = ListGroupsResponse([sample_group], 1, '*', 'start-from', 'next-id')

    # Set next id to None to indicate end of list
    sample_list_groups2 = ListGroupsResponse([sample_group2], 1, '*', 'start-from', next_id=None)
    mocked_responses.add(
        responses.GET, 'http://test.com/groups?groupNameFilter=*',
        body=to_json_string(sample_list_groups1), status=200)

    # list all puts the next id from the first response into the startFrom for the next request
    mocked_responses.add(
        responses.GET, 'http://test.com/groups?groupNameFilter=*&startFrom=next-id',
        body=to_json_string(sample_list_groups2), status=200)
    r = vinyldns_client.list_all_my_groups('*')

    assert r.start_from is None
    assert r.next_id is None
    assert sample_list_groups1.group_name_filter == r.group_name_filter

    for l, r in zip([sample_group, sample_group2], r.groups):
        check_groups_are_same(l, r)
Esempio n. 25
0
    def delete_zone_acl_rule(self, zone_id, acl_rule, **kwargs):
        """
        Delete an acl rule from the zone.

        :param zone_id: The id of the zone to remove the acl from
        :param acl_rule: The acl rule to remove
        :return: the content of the response
        """
        url = urljoin(self.index_url, '/zones/{0}/acl/rules'.format(zone_id))
        response, data = self.__make_request(url, 'DELETE', self.headers,
                                             to_json_string(acl_rule), **kwargs)

        return ZoneChange.from_dict(data)
Esempio n. 26
0
    def add_zone_acl_rule(self, zone_id, acl_rule, **kwargs):
        """
        Put an acl rule on the zone.

        :param zone_id: The id of the zone to attach the acl rule to
        :param acl_rule: The acl rule contents
        :return: the content of the response
        """
        url = urljoin(self.index_url, '/zones/{0}/acl/rules'.format(zone_id))
        response, data = self.__make_request(url, 'PUT', self.headers,
                                             to_json_string(acl_rule), **kwargs)

        return ZoneChange.from_dict(data)
Esempio n. 27
0
def test_create_batch_change(mocked_responses, vinyldns_client):
    ar = AddRecord('foo.baa.com', RecordType.A, 100, AData('1.2.3.4'))
    drs = DeleteRecordSet('baz.bar.com', RecordType.A)
    drs_with_data = DeleteRecordSet('baz-with-data.bar.com', RecordType.A,
                                    AData('5.6.7.8'))

    arc = AddRecordChange(forward_zone.id, forward_zone.name,
                          'foo', 'foo.bar.com', RecordType.A, 200,
                          AData('1.2.3.4'), 'Complete', 'id1', [],
                          'system-message', 'rchangeid1', 'rsid1')

    drc = DeleteRecordSetChange(forward_zone.id, forward_zone.name, 'baz',
                                'baz.bar.com', RecordType.A, 'Complete', 'id2',
                                [], 'system-message', 'rchangeid2', 'rsid2')

    drc_with_data = DeleteRecordSetChange(forward_zone.id, forward_zone.name,
                                          'baz-with-data',
                                          'baz-with-data.bar.com',
                                          RecordType.A, 'Complete', 'id2', [],
                                          'system-message', 'rchangeid3',
                                          'rsid3', AData('5.6.7.8'))

    # Python 2/3 compatibility
    try:
        tomorrow = datetime.now().astimezone() + timedelta(1)
    except TypeError:
        tomorrow = datetime.now(tzlocal()).astimezone(tzlocal()) + timedelta(1)

    bc = BatchChange('user-id',
                     'user-name',
                     datetime.utcnow(), [arc, drc, drc_with_data],
                     'bcid',
                     'Scheduled',
                     'PendingReview',
                     comments='batch change test',
                     owner_group_id='owner-group-id',
                     scheduled_time=tomorrow)

    mocked_responses.add(responses.POST,
                         'http://test.com/zones/batchrecordchanges',
                         body=to_json_string(bc),
                         status=200)

    r = vinyldns_client.create_batch_change(
        BatchChangeRequest(changes=[ar, drs, drs_with_data],
                           comments='batch change test',
                           owner_group_id='owner-group-id',
                           scheduled_time=tomorrow))

    check_batch_changes_are_same(r, bc)
Esempio n. 28
0
def test_list_zones(mocked_responses, vinyldns_client):
    lzr = ListZonesResponse(zones=[forward_zone, ip4_zone, ip6_zone], name_filter='*', start_from='start-from',
                            next_id='next', max_items=100)
    mocked_responses.add(
        responses.GET, 'http://test.com/zones?nameFilter=*&startFrom=start-from&maxItems=100',
        body=to_json_string(lzr), status=200
    )
    r = vinyldns_client.list_zones('*', 'start-from', 100)
    assert r.name_filter == lzr.name_filter
    assert r.start_from == lzr.start_from
    assert r.next_id == lzr.next_id
    assert r.max_items == lzr.max_items
    for l, r in zip(lzr.zones, r.zones):
        check_zones_are_same(l, r)
def test_list_record_sets(mocked_responses, vinyldns_client):
    lrr = ListRecordSetsResponse(record_set_values, 'start', 'next', 100, '*')
    mocked_responses.add(
        responses.GET,
        'http://test.com/zones/{0}/recordsets?startFrom=start&maxItems=100&recordNameFilter=*'
        .format(forward_zone.id),
        body=to_json_string(lrr),
        status=200)
    r = vinyldns_client.list_record_sets(forward_zone.id, 'start', 100, '*')
    assert r.start_from == lrr.start_from
    assert r.next_id == lrr.next_id
    assert r.record_name_filter == lrr.record_name_filter
    assert r.max_items == lrr.max_items
    for l, r in zip(r.record_sets, lrr.record_sets):
        check_record_sets_are_equal(l, r)
def test_record_set_changes_serdes(record_set):
    a = gen_rs_change(record_set)
    s = to_json_string(a)
    b = from_json_string(s, RecordSetChange.from_dict)

    assert a.user_id == b.user_id
    assert a.change_type == b.change_type
    assert a.status == b.status
    assert a.created == b.created
    assert a.system_message == b.system_message
    assert a.id == b.id
    assert a.user_name == b.user_name
    assert a.zone.id == b.zone.id
    check_record_sets_are_equal(a.record_set, b.record_set)
    check_record_sets_are_equal(a.updates, b.updates)