com.google.api.services.dns.model.Change

Here are the examples of the java api class com.google.api.services.dns.model.Change taken from open source projects.

1. ChangeRequestInfo#toPb()

Project: gcloud-java
File: ChangeRequestInfo.java
Change toPb() {
    Change pb = new Change();
    // set id
    if (generatedId() != null) {
        pb.setId(generatedId());
    }
    // set timestamp
    if (startTimeMillis() != null) {
        pb.setStartTime(ISODateTimeFormat.dateTime().withZoneUTC().print(startTimeMillis()));
    }
    // set status
    if (status() != null) {
        pb.setStatus(status().name().toLowerCase());
    }
    // set a list of additions
    pb.setAdditions(Lists.transform(additions(), RecordSet.TO_PB_FUNCTION));
    // set a list of deletions
    pb.setDeletions(Lists.transform(deletions(), RecordSet.TO_PB_FUNCTION));
    return pb;
}

2. LocalDnsHelperTest#testCheckAdditionsDeletions()

Project: gcloud-java
File: LocalDnsHelperTest.java
@Test
public void testCheckAdditionsDeletions() {
    ResourceRecordSet validA = new ResourceRecordSet();
    validA.setName(ZONE1.getDnsName());
    validA.setType("A");
    validA.setRrdatas(ImmutableList.of("0.255.1.5"));
    Change validChange = new Change();
    validChange.setAdditions(ImmutableList.of(validA));
    LOCAL_DNS_HELPER.createZone(PROJECT_ID1, ZONE1);
    LOCAL_DNS_HELPER.createChange(PROJECT_ID1, ZONE_NAME1, validChange);
    LocalDnsHelper.ZoneContainer container = LOCAL_DNS_HELPER.findZone(PROJECT_ID1, ZONE_NAME1);
    LocalDnsHelper.Response response = LocalDnsHelper.checkAdditionsDeletions(ImmutableList.of(validA), null, container);
    assertEquals(409, response.code());
    assertTrue(response.body().contains("already exists"));
}

3. LocalDnsHelperTest#testCheckRrset()

Project: gcloud-java
File: LocalDnsHelperTest.java
@Test
public void testCheckRrset() {
    ResourceRecordSet valid = new ResourceRecordSet();
    valid.setName(ZONE1.getDnsName());
    valid.setType("A");
    valid.setRrdatas(ImmutableList.of("0.255.1.5"));
    valid.setTtl(500);
    Change validChange = new Change();
    validChange.setAdditions(ImmutableList.of(valid));
    LOCAL_DNS_HELPER.createZone(PROJECT_ID1, ZONE1);
    LOCAL_DNS_HELPER.createChange(PROJECT_ID1, ZONE_NAME1, validChange);
    // delete with field mismatch
    LocalDnsHelper.ZoneContainer zone = LOCAL_DNS_HELPER.findZone(PROJECT_ID1, ZONE_NAME1);
    valid.setTtl(valid.getTtl() + 20);
    LocalDnsHelper.Response response = LocalDnsHelper.checkRrset(valid, zone, 0, "deletions");
    assertEquals(412, response.code());
    assertTrue(response.body().contains("entity.change.deletions[0]"));
}

4. LocalDnsHelper#getChange()

Project: gcloud-java
File: LocalDnsHelper.java
/**
   * Returns a response to getChange service call.
   */
@VisibleForTesting
Response getChange(String projectId, String zoneName, String changeId, String query) {
    Change change = findChange(projectId, zoneName, changeId);
    if (change == null) {
        ZoneContainer zone = findZone(projectId, zoneName);
        if (zone == null) {
            return Error.NOT_FOUND.response(String.format("The 'parameters.managedZone' resource named '%s' does not exist.", zoneName));
        }
        return Error.NOT_FOUND.response(String.format("The 'parameters.changeId' resource named '%s' does not exist.", changeId));
    }
    String[] fields = OptionParsers.parseGetOptions(query);
    Change result = OptionParsers.extractFields(change, fields);
    try {
        return new Response(HTTP_OK, jsonFactory.toString(result));
    } catch (IOException e) {
        return Error.INTERNAL_ERROR.response(String.format("Error when serializing change %s in managed zone %s in project %s.", changeId, zoneName, projectId));
    }
}

5. LocalDnsHelperTest#testCreateChangeContentValidation()

Project: gcloud-java
File: LocalDnsHelperTest.java
@Test
public void testCreateChangeContentValidation() {
    ResourceRecordSet validA = new ResourceRecordSet();
    validA.setName(ZONE1.getDnsName());
    validA.setType("A");
    validA.setRrdatas(ImmutableList.of("0.255.1.5"));
    Change validChange = new Change();
    validChange.setAdditions(ImmutableList.of(validA));
    LOCAL_DNS_HELPER.createZone(PROJECT_ID1, ZONE1);
    LOCAL_DNS_HELPER.createChange(PROJECT_ID1, ZONE_NAME1, validChange);
    LocalDnsHelper.Response response = LOCAL_DNS_HELPER.createChange(PROJECT_ID1, ZONE_NAME1, validChange);
    assertEquals(409, response.code());
    assertTrue(response.body().contains("already exists"));
    // delete with field mismatch
    Change delete = new Change();
    // mismatch
    validA.setTtl(20);
    delete.setDeletions(ImmutableList.of(validA));
    response = LOCAL_DNS_HELPER.createChange(PROJECT_ID1, ZONE_NAME1, delete);
    assertEquals(412, response.code());
    assertTrue(response.body().contains("entity.change.deletions[0]"));
    // delete and add SOA
    Change addition = new Change();
    ImmutableCollection<ResourceRecordSet> dnsRecords = LOCAL_DNS_HELPER.findZone(PROJECT_ID1, ZONE_NAME1).dnsRecords().get().values();
    LinkedList<ResourceRecordSet> deletions = new LinkedList<>();
    LinkedList<ResourceRecordSet> additions = new LinkedList<>();
    for (ResourceRecordSet rrset : dnsRecords) {
        if (rrset.getType().equals("SOA")) {
            deletions.add(rrset);
            ResourceRecordSet copy = copyRrset(rrset);
            copy.setName("x." + copy.getName());
            additions.add(copy);
            break;
        }
    }
    delete.setDeletions(deletions);
    addition.setAdditions(additions);
    response = LOCAL_DNS_HELPER.createChange(PROJECT_ID1, ZONE_NAME1, delete);
    assertEquals(400, response.code());
    assertTrue(response.body().contains("zone must contain exactly one resource record set of type 'SOA' at the apex"));
    assertTrue(response.body().contains("deletions[0]"));
    response = LOCAL_DNS_HELPER.createChange(PROJECT_ID1, ZONE_NAME1, addition);
    assertEquals(400, response.code());
    assertTrue(response.body().contains("zone must contain exactly one resource record set of type 'SOA' at the apex"));
    assertTrue(response.body().contains("additions[0]"));
    // delete NS
    deletions = new LinkedList<>();
    additions = new LinkedList<>();
    for (ResourceRecordSet rrset : dnsRecords) {
        if (rrset.getType().equals("NS")) {
            deletions.add(rrset);
            ResourceRecordSet copy = copyRrset(rrset);
            copy.setName("x." + copy.getName());
            additions.add(copy);
            break;
        }
    }
    delete.setDeletions(deletions);
    addition.setAdditions(additions);
    response = LOCAL_DNS_HELPER.createChange(PROJECT_ID1, ZONE_NAME1, delete);
    assertEquals(400, response.code());
    assertTrue(response.body().contains("zone must contain exactly one resource record set of type 'NS' at the apex"));
    response = LOCAL_DNS_HELPER.createChange(PROJECT_ID1, ZONE_NAME1, addition);
    assertEquals(400, response.code());
    assertTrue(response.body().contains("zone must contain exactly one resource record set of type 'NS' at the apex"));
    assertTrue(response.body().contains("additions[0]"));
    // change (delete + add)
    addition.setDeletions(deletions);
    response = LOCAL_DNS_HELPER.createChange(PROJECT_ID1, ZONE_NAME1, addition);
    assertEquals(200, response.code());
}

6. LocalDnsHelperTest#testCheckChange()

Project: gcloud-java
File: LocalDnsHelperTest.java
@Test
public void testCheckChange() {
    ResourceRecordSet validA = new ResourceRecordSet();
    validA.setName(ZONE1.getDnsName());
    validA.setType("A");
    validA.setRrdatas(ImmutableList.of("0.255.1.5"));
    ResourceRecordSet invalidA = new ResourceRecordSet();
    invalidA.setName(ZONE1.getDnsName());
    invalidA.setType("A");
    invalidA.setRrdatas(ImmutableList.of("0.-255.1.5"));
    Change validChange = new Change();
    validChange.setAdditions(ImmutableList.of(validA));
    Change invalidChange = new Change();
    invalidChange.setAdditions(ImmutableList.of(invalidA));
    LocalDnsHelper.ZoneContainer zoneContainer = new LocalDnsHelper.ZoneContainer(ZONE1);
    LocalDnsHelper.Response response = LocalDnsHelper.checkChange(validChange, zoneContainer);
    assertNull(response);
    response = LocalDnsHelper.checkChange(invalidChange, zoneContainer);
    assertEquals(400, response.code());
    assertTrue(response.body().contains("additions[0].rrdata[0]"));
    // only empty additions/deletions
    Change empty = new Change();
    empty.setAdditions(ImmutableList.<ResourceRecordSet>of());
    empty.setDeletions(ImmutableList.<ResourceRecordSet>of());
    response = LocalDnsHelper.checkChange(empty, zoneContainer);
    assertEquals(400, response.code());
    assertTrue(response.body().contains("The 'entity.change' parameter is required but was missing."));
    // null additions/deletions
    empty = new Change();
    response = LocalDnsHelper.checkChange(empty, zoneContainer);
    assertEquals(400, response.code());
    assertTrue(response.body().contains("The 'entity.change' parameter is required but was missing."));
    // non-matching name
    validA.setName(ZONE1.getDnsName() + ".aaa.");
    response = LocalDnsHelper.checkChange(validChange, zoneContainer);
    assertEquals(400, response.code());
    assertTrue(response.body().contains("additions[0].name"));
    // wrong type
    // revert
    validA.setName(ZONE1.getDnsName());
    validA.setType("ABCD");
    response = LocalDnsHelper.checkChange(validChange, zoneContainer);
    assertEquals(400, response.code());
    assertTrue(response.body().contains("additions[0].type"));
    // wrong ttl
    // revert
    validA.setType("A");
    validA.setTtl(-1);
    response = LocalDnsHelper.checkChange(validChange, zoneContainer);
    assertEquals(400, response.code());
    assertTrue(response.body().contains("additions[0].ttl"));
    validA.setTtl(null);
    // null name
    validA.setName(null);
    response = LocalDnsHelper.checkChange(validChange, zoneContainer);
    assertEquals(400, response.code());
    assertTrue(response.body().contains("additions[0].name"));
    validA.setName(ZONE1.getDnsName());
    // null type
    validA.setType(null);
    response = LocalDnsHelper.checkChange(validChange, zoneContainer);
    assertEquals(400, response.code());
    assertTrue(response.body().contains("additions[0].type"));
    validA.setType("A");
    // null rrdata
    // preserve
    final List<String> temp = validA.getRrdatas();
    validA.setRrdatas(null);
    response = LocalDnsHelper.checkChange(validChange, zoneContainer);
    assertEquals(400, response.code());
    assertTrue(response.body().contains("additions[0].rrdata"));
    validA.setRrdatas(temp);
    // delete non-existent
    ResourceRecordSet nonExistent = new ResourceRecordSet();
    nonExistent.setName(ZONE1.getDnsName());
    nonExistent.setType("AAAA");
    nonExistent.setRrdatas(ImmutableList.of("0:0:0:0:5::6"));
    Change delete = new Change();
    delete.setDeletions(ImmutableList.of(nonExistent));
    response = LocalDnsHelper.checkChange(delete, zoneContainer);
    assertEquals(404, response.code());
    assertTrue(response.body().contains("deletions[0]"));
}

7. LocalDnsHelper#createChange()

Project: gcloud-java
File: LocalDnsHelper.java
/**
   * Creates a new change, stores it, and if delayChange > 0, invokes processing in a new thread.
   */
Response createChange(String projectId, String zoneName, Change change, String... fields) {
    ZoneContainer zoneContainer = findZone(projectId, zoneName);
    if (zoneContainer == null) {
        return Error.NOT_FOUND.response(String.format("The 'parameters.managedZone' resource named %s does not exist.", zoneName));
    }
    Response response = checkChange(change, zoneContainer);
    if (response != null) {
        return response;
    }
    Change completeChange = new Change();
    if (change.getAdditions() != null) {
        completeChange.setAdditions(ImmutableList.copyOf(change.getAdditions()));
    }
    if (change.getDeletions() != null) {
        completeChange.setDeletions(ImmutableList.copyOf(change.getDeletions()));
    }
    /* We need to set ID for the change. We are working in concurrent environment. We know that the
    element fell on an index between 1 and maxId (index 0 is the default change which creates SOA
    and NS), so we will reset all IDs between 0 and maxId (all of them are valid for the respective
    objects). */
    ConcurrentLinkedQueue<Change> changeSequence = zoneContainer.changes();
    changeSequence.add(completeChange);
    int maxId = changeSequence.size();
    int index = 0;
    for (Change c : changeSequence) {
        if (index == maxId) {
            break;
        }
        c.setId(String.valueOf(index++));
    }
    completeChange.setStatus("pending");
    completeChange.setStartTime(ISODateTimeFormat.dateTime().withZoneUTC().print(System.currentTimeMillis()));
    invokeChange(projectId, zoneName, completeChange.getId());
    Change result = OptionParsers.extractFields(completeChange, fields);
    try {
        return new Response(HTTP_OK, jsonFactory.toString(result));
    } catch (IOException e) {
        return Error.INTERNAL_ERROR.response(String.format("Error when serializing change %s in managed zone %s in project %s.", result.getId(), zoneName, projectId));
    }
}

8. LocalDnsHelper#createZone()

Project: gcloud-java
File: LocalDnsHelper.java
/**
   * Creates new managed zone and stores it in the collection. Assumes that project exists.
   */
@VisibleForTesting
Response createZone(String projectId, ManagedZone zone, String... fields) {
    Response errorResponse = checkZone(zone);
    if (errorResponse != null) {
        return errorResponse;
    }
    ManagedZone completeZone = new ManagedZone();
    completeZone.setName(zone.getName());
    completeZone.setDnsName(zone.getDnsName());
    completeZone.setDescription(zone.getDescription());
    completeZone.setNameServerSet(zone.getNameServerSet());
    completeZone.setCreationTime(ISODateTimeFormat.dateTime().withZoneUTC().print(System.currentTimeMillis()));
    completeZone.setId(BigInteger.valueOf(Math.abs(ID_GENERATOR.nextLong() % Long.MAX_VALUE)));
    completeZone.setNameServers(randomNameservers());
    ZoneContainer zoneContainer = new ZoneContainer(completeZone);
    ImmutableSortedMap<String, ResourceRecordSet> defaultsRecords = defaultRecords(completeZone);
    zoneContainer.dnsRecords().set(defaultsRecords);
    Change change = new Change();
    change.setAdditions(ImmutableList.copyOf(defaultsRecords.values()));
    change.setStatus("done");
    change.setId("0");
    change.setStartTime(ISODateTimeFormat.dateTime().withZoneUTC().print(System.currentTimeMillis()));
    zoneContainer.changes().add(change);
    ProjectContainer projectContainer = findProject(projectId);
    ZoneContainer oldValue = projectContainer.zones().putIfAbsent(completeZone.getName(), zoneContainer);
    if (oldValue != null) {
        return Error.ALREADY_EXISTS.response(String.format("The resource 'entity.managedZone' named '%s' already exists", completeZone.getName()));
    }
    ManagedZone result = OptionParsers.extractFields(completeZone, fields);
    try {
        return new Response(HTTP_OK, jsonFactory.toString(result));
    } catch (IOException e) {
        return Error.INTERNAL_ERROR.response(String.format("Error when serializing managed zone %s.", result.getName()));
    }
}

9. LocalDnsHelperTest#testGetChange()

Project: gcloud-java
File: LocalDnsHelperTest.java
@Test
public void testGetChange() {
    // existent
    RPC.create(ZONE1, EMPTY_RPC_OPTIONS);
    Change created = RPC.applyChangeRequest(ZONE1.getName(), CHANGE1, EMPTY_RPC_OPTIONS);
    Change retrieved = RPC.getChangeRequest(ZONE1.getName(), "1", EMPTY_RPC_OPTIONS);
    assertEquals(created, retrieved);
    // non-existent
    assertNull(RPC.getChangeRequest(ZONE1.getName(), "2", EMPTY_RPC_OPTIONS));
    // non-existent zone
    try {
        RPC.getChangeRequest(ZONE_NAME2, "1", EMPTY_RPC_OPTIONS);
        fail();
    } catch (DnsException ex) {
        assertEquals(404, ex.code());
        assertTrue(ex.getMessage().contains("managedZone"));
    }
    // field options
    RPC.applyChangeRequest(ZONE1.getName(), CHANGE_KEEP, EMPTY_RPC_OPTIONS);
    Change change = RPC.applyChangeRequest(ZONE1.getName(), CHANGE_COMPLEX, EMPTY_RPC_OPTIONS);
    Map<DnsRpc.Option, Object> options = new HashMap<>();
    options.put(DnsRpc.Option.FIELDS, "additions");
    Change complex = RPC.getChangeRequest(ZONE1.getName(), change.getId(), options);
    assertNotNull(complex.getAdditions());
    assertNull(complex.getDeletions());
    assertNull(complex.getId());
    assertNull(complex.getStartTime());
    assertNull(complex.getStatus());
    options.put(DnsRpc.Option.FIELDS, "deletions");
    complex = RPC.getChangeRequest(ZONE1.getName(), change.getId(), options);
    assertNull(complex.getAdditions());
    assertNotNull(complex.getDeletions());
    assertNull(complex.getId());
    assertNull(complex.getStartTime());
    assertNull(complex.getStatus());
    options.put(DnsRpc.Option.FIELDS, "id");
    complex = RPC.getChangeRequest(ZONE1.getName(), change.getId(), options);
    assertNull(complex.getAdditions());
    assertNull(complex.getDeletions());
    assertNotNull(complex.getId());
    assertNull(complex.getStartTime());
    assertNull(complex.getStatus());
    options.put(DnsRpc.Option.FIELDS, "startTime");
    complex = RPC.getChangeRequest(ZONE1.getName(), change.getId(), options);
    assertNull(complex.getAdditions());
    assertNull(complex.getDeletions());
    assertNull(complex.getId());
    assertNotNull(complex.getStartTime());
    assertNull(complex.getStatus());
    options.put(DnsRpc.Option.FIELDS, "status");
    complex = RPC.getChangeRequest(ZONE1.getName(), change.getId(), options);
    assertNull(complex.getAdditions());
    assertNull(complex.getDeletions());
    assertNull(complex.getId());
    assertNull(complex.getStartTime());
    assertNotNull(complex.getStatus());
}

10. LocalDnsHelperTest#testGetChangeBatch()

Project: gcloud-java
File: LocalDnsHelperTest.java
@Test
public void testGetChangeBatch() {
    // existent
    RPC.create(ZONE1, EMPTY_RPC_OPTIONS);
    final Change created = RPC.applyChangeRequest(ZONE1.getName(), CHANGE1, EMPTY_RPC_OPTIONS);
    RpcBatch batch = RPC.createBatch();
    batch.addGetChangeRequest(ZONE1.getName(), "1", new SuccessExpectedCallback<Change>() {

        @Override
        public void onSuccess(Change retrieved) {
            assertEquals(created, retrieved);
        }
    }, EMPTY_RPC_OPTIONS);
    // non-existent
    batch.addGetChangeRequest(ZONE1.getName(), "2", new FailExpectedCallback<Change>() {

        @Override
        public void onFailure(GoogleJsonError googleJsonError) {
            // expected
            assertEquals(404, googleJsonError.getCode());
        }
    }, EMPTY_RPC_OPTIONS);
    // non-existent zone
    batch.addGetChangeRequest(ZONE_NAME2, "1", new FailExpectedCallback<Change>() {

        @Override
        public void onFailure(GoogleJsonError ex) {
            // expected
            assertEquals(404, ex.getCode());
            assertTrue(ex.getMessage().contains("managedZone"));
        }
    }, EMPTY_RPC_OPTIONS);
    batch.submit();
    // field options
    RPC.applyChangeRequest(ZONE1.getName(), CHANGE_KEEP, EMPTY_RPC_OPTIONS);
    Change keep = RPC.applyChangeRequest(ZONE1.getName(), CHANGE_COMPLEX, EMPTY_RPC_OPTIONS);
    batch = RPC.createBatch();
    batch.addGetChangeRequest(ZONE1.getName(), keep.getId(), new SuccessExpectedCallback<Change>() {

        @Override
        public void onSuccess(Change complex) {
            assertNotNull(complex.getAdditions());
            assertNull(complex.getDeletions());
            assertNull(complex.getId());
            assertNull(complex.getStartTime());
            assertNull(complex.getStatus());
        }
    }, ImmutableMap.of(DnsRpc.Option.FIELDS, "additions"));
    batch.addGetChangeRequest(ZONE1.getName(), keep.getId(), new SuccessExpectedCallback<Change>() {

        @Override
        public void onSuccess(Change complex) {
            assertNull(complex.getAdditions());
            assertNotNull(complex.getDeletions());
            assertNull(complex.getId());
            assertNull(complex.getStartTime());
            assertNull(complex.getStatus());
        }
    }, ImmutableMap.of(DnsRpc.Option.FIELDS, "deletions"));
    batch.addGetChangeRequest(ZONE1.getName(), keep.getId(), new SuccessExpectedCallback<Change>() {

        @Override
        public void onSuccess(Change complex) {
            assertNull(complex.getAdditions());
            assertNull(complex.getDeletions());
            assertNotNull(complex.getId());
            assertNull(complex.getStartTime());
            assertNull(complex.getStatus());
        }
    }, ImmutableMap.of(DnsRpc.Option.FIELDS, "id"));
    batch.addGetChangeRequest(ZONE1.getName(), keep.getId(), new SuccessExpectedCallback<Change>() {

        @Override
        public void onSuccess(Change complex) {
            assertNull(complex.getAdditions());
            assertNull(complex.getDeletions());
            assertNull(complex.getId());
            assertNotNull(complex.getStartTime());
            assertNull(complex.getStatus());
        }
    }, ImmutableMap.of(DnsRpc.Option.FIELDS, "startTime"));
    batch.addGetChangeRequest(ZONE1.getName(), keep.getId(), new SuccessExpectedCallback<Change>() {

        @Override
        public void onSuccess(Change complex) {
            assertNull(complex.getAdditions());
            assertNull(complex.getDeletions());
            assertNull(complex.getId());
            assertNull(complex.getStartTime());
            assertNotNull(complex.getStatus());
        }
    }, ImmutableMap.of(DnsRpc.Option.FIELDS, "status"));
    batch.submit();
}

11. LocalDnsHelperTest#testCreateChange()

Project: gcloud-java
File: LocalDnsHelperTest.java
@Test
public void testCreateChange() {
    // non-existent zone
    try {
        RPC.applyChangeRequest(ZONE_NAME1, CHANGE1, EMPTY_RPC_OPTIONS);
        fail("Zone was not created yet.");
    } catch (DnsException ex) {
        assertEquals(404, ex.code());
    }
    // existent zone
    RPC.create(ZONE1, EMPTY_RPC_OPTIONS);
    assertNull(RPC.getChangeRequest(ZONE_NAME1, "1", EMPTY_RPC_OPTIONS));
    Change created = RPC.applyChangeRequest(ZONE1.getName(), CHANGE1, EMPTY_RPC_OPTIONS);
    assertEquals(created, RPC.getChangeRequest(ZONE_NAME1, "1", EMPTY_RPC_OPTIONS));
    // field options
    RPC.applyChangeRequest(ZONE1.getName(), CHANGE_KEEP, EMPTY_RPC_OPTIONS);
    Map<DnsRpc.Option, Object> options = new HashMap<>();
    options.put(DnsRpc.Option.FIELDS, "additions");
    Change complex = RPC.applyChangeRequest(ZONE1.getName(), CHANGE_COMPLEX, options);
    assertNotNull(complex.getAdditions());
    assertNull(complex.getDeletions());
    assertNull(complex.getId());
    assertNull(complex.getStartTime());
    assertNull(complex.getStatus());
    options.put(DnsRpc.Option.FIELDS, "deletions");
    complex = RPC.applyChangeRequest(ZONE1.getName(), CHANGE_COMPLEX, options);
    assertNull(complex.getAdditions());
    assertNotNull(complex.getDeletions());
    assertNull(complex.getId());
    assertNull(complex.getStartTime());
    assertNull(complex.getStatus());
    options.put(DnsRpc.Option.FIELDS, "id");
    complex = RPC.applyChangeRequest(ZONE1.getName(), CHANGE_COMPLEX, options);
    assertNull(complex.getAdditions());
    assertNull(complex.getDeletions());
    assertNotNull(complex.getId());
    assertNull(complex.getStartTime());
    assertNull(complex.getStatus());
    options.put(DnsRpc.Option.FIELDS, "startTime");
    complex = RPC.applyChangeRequest(ZONE1.getName(), CHANGE_COMPLEX, options);
    assertNull(complex.getAdditions());
    assertNull(complex.getDeletions());
    assertNull(complex.getId());
    assertNotNull(complex.getStartTime());
    assertNull(complex.getStatus());
    options.put(DnsRpc.Option.FIELDS, "status");
    complex = RPC.applyChangeRequest(ZONE1.getName(), CHANGE_COMPLEX, options);
    assertNull(complex.getAdditions());
    assertNull(complex.getDeletions());
    assertNull(complex.getId());
    assertNull(complex.getStartTime());
    assertNotNull(complex.getStatus());
}

12. LocalDnsHelper#applyExistingChange()

Project: gcloud-java
File: LocalDnsHelper.java
/**
   * Applies changes to a zone. Repeatedly tries until succeeds. Thread safe and deadlock safe.
   */
private void applyExistingChange(String projectId, String zoneName, String changeId) {
    Change change = findChange(projectId, zoneName, changeId);
    if (change == null) {
        // no such change exists, nothing to do
        return;
    }
    ZoneContainer wrapper = findZone(projectId, zoneName);
    if (wrapper == null) {
        // no such zone exists; it might have been deleted by another thread
        return;
    }
    AtomicReference<ImmutableSortedMap<String, ResourceRecordSet>> dnsRecords = wrapper.dnsRecords();
    while (true) {
        // managed zone must have a set of records which is not null
        ImmutableSortedMap<String, ResourceRecordSet> original = dnsRecords.get();
        // the copy will be populated when handling deletions
        SortedMap<String, ResourceRecordSet> copy = new TreeMap<>();
        // apply deletions first
        List<ResourceRecordSet> deletions = change.getDeletions();
        if (deletions != null) {
            for (Map.Entry<String, ResourceRecordSet> entry : original.entrySet()) {
                if (!deletions.contains(entry.getValue())) {
                    copy.put(entry.getKey(), entry.getValue());
                }
            }
        } else {
            copy.putAll(original);
        }
        // apply additions
        List<ResourceRecordSet> additions = change.getAdditions();
        if (additions != null) {
            for (ResourceRecordSet addition : additions) {
                ResourceRecordSet rrset = new ResourceRecordSet();
                rrset.setName(addition.getName());
                rrset.setRrdatas(ImmutableList.copyOf(addition.getRrdatas()));
                rrset.setTtl(addition.getTtl());
                rrset.setType(addition.getType());
                String id = getUniqueId(copy.keySet());
                copy.put(id, rrset);
            }
        }
        boolean success = dnsRecords.compareAndSet(original, ImmutableSortedMap.copyOf(copy));
        if (success) {
            // success if no other thread modified the value in the meantime
            break;
        }
    }
    change.setStatus("done");
}

13. LocalDnsHelperTest#testListChanges()

Project: gcloud-java
File: LocalDnsHelperTest.java
@Test
public void testListChanges() {
    // no such zone exists
    try {
        RPC.listChangeRequests(ZONE_NAME1, EMPTY_RPC_OPTIONS);
        fail();
    } catch (DnsException ex) {
        assertEquals(404, ex.code());
        assertTrue(ex.getMessage().contains("managedZone"));
    }
    // zone exists but has no changes
    RPC.create(ZONE1, EMPTY_RPC_OPTIONS);
    Iterable<Change> results = RPC.listChangeRequests(ZONE1.getName(), EMPTY_RPC_OPTIONS).results();
    ImmutableList<Change> changes = ImmutableList.copyOf(results);
    assertEquals(1, changes.size());
    // zone has changes
    RPC.applyChangeRequest(ZONE1.getName(), CHANGE1, EMPTY_RPC_OPTIONS);
    RPC.applyChangeRequest(ZONE1.getName(), CHANGE2, EMPTY_RPC_OPTIONS);
    RPC.applyChangeRequest(ZONE1.getName(), CHANGE_KEEP, EMPTY_RPC_OPTIONS);
    results = RPC.listChangeRequests(ZONE1.getName(), EMPTY_RPC_OPTIONS).results();
    changes = ImmutableList.copyOf(results);
    assertEquals(4, changes.size());
    // error in options
    Map<DnsRpc.Option, Object> options = new HashMap<>();
    options.put(DnsRpc.Option.PAGE_SIZE, 0);
    try {
        RPC.listChangeRequests(ZONE1.getName(), options);
        fail();
    } catch (DnsException ex) {
        assertEquals(400, ex.code());
        assertTrue(ex.getMessage().contains("parameters.maxResults"));
    }
    options.put(DnsRpc.Option.PAGE_SIZE, -1);
    try {
        RPC.listChangeRequests(ZONE1.getName(), options);
        fail();
    } catch (DnsException ex) {
        assertEquals(400, ex.code());
        assertTrue(ex.getMessage().contains("parameters.maxResults"));
    }
    options.put(DnsRpc.Option.PAGE_SIZE, 15);
    results = RPC.listChangeRequests(ZONE1.getName(), options).results();
    changes = ImmutableList.copyOf(results);
    assertEquals(4, changes.size());
    options = new HashMap<>();
    options.put(DnsRpc.Option.SORTING_ORDER, "descending");
    results = RPC.listChangeRequests(ZONE1.getName(), options).results();
    ImmutableList<Change> descending = ImmutableList.copyOf(results);
    results = RPC.listChangeRequests(ZONE1.getName(), EMPTY_RPC_OPTIONS).results();
    ImmutableList<Change> ascending = ImmutableList.copyOf(results);
    int size = 4;
    assertEquals(size, descending.size());
    for (int i = 0; i < size; i++) {
        assertEquals(descending.get(i), ascending.get(size - i - 1));
    }
    options.put(DnsRpc.Option.SORTING_ORDER, "something else");
    try {
        RPC.listChangeRequests(ZONE1.getName(), options);
        fail();
    } catch (DnsException ex) {
        assertEquals(400, ex.code());
        assertTrue(ex.getMessage().contains("parameters.sortOrder"));
    }
    // field options
    RPC.applyChangeRequest(ZONE1.getName(), CHANGE_COMPLEX, EMPTY_RPC_OPTIONS);
    options = new HashMap<>();
    options.put(DnsRpc.Option.SORTING_ORDER, "descending");
    options.put(DnsRpc.Option.FIELDS, "changes(additions)");
    DnsRpc.ListResult<Change> changeListResult = RPC.listChangeRequests(ZONE1.getName(), options);
    changes = ImmutableList.copyOf(changeListResult.results());
    Change complex = changes.get(0);
    assertNotNull(complex.getAdditions());
    assertNull(complex.getDeletions());
    assertNull(complex.getId());
    assertNull(complex.getStartTime());
    assertNull(complex.getStatus());
    assertNull(changeListResult.pageToken());
    options.put(DnsRpc.Option.FIELDS, "changes(deletions)");
    changeListResult = RPC.listChangeRequests(ZONE1.getName(), options);
    changes = ImmutableList.copyOf(changeListResult.results());
    complex = changes.get(0);
    assertNull(complex.getAdditions());
    assertNotNull(complex.getDeletions());
    assertNull(complex.getId());
    assertNull(complex.getStartTime());
    assertNull(complex.getStatus());
    assertNull(changeListResult.pageToken());
    options.put(DnsRpc.Option.FIELDS, "changes(id)");
    changeListResult = RPC.listChangeRequests(ZONE1.getName(), options);
    changes = ImmutableList.copyOf(changeListResult.results());
    complex = changes.get(0);
    assertNull(complex.getAdditions());
    assertNull(complex.getDeletions());
    assertNotNull(complex.getId());
    assertNull(complex.getStartTime());
    assertNull(complex.getStatus());
    assertNull(changeListResult.pageToken());
    options.put(DnsRpc.Option.FIELDS, "changes(startTime)");
    changeListResult = RPC.listChangeRequests(ZONE1.getName(), options);
    changes = ImmutableList.copyOf(changeListResult.results());
    complex = changes.get(0);
    assertNull(complex.getAdditions());
    assertNull(complex.getDeletions());
    assertNull(complex.getId());
    assertNotNull(complex.getStartTime());
    assertNull(complex.getStatus());
    assertNull(changeListResult.pageToken());
    options.put(DnsRpc.Option.FIELDS, "changes(status)");
    changeListResult = RPC.listChangeRequests(ZONE1.getName(), options);
    changes = ImmutableList.copyOf(changeListResult.results());
    complex = changes.get(0);
    assertNull(complex.getAdditions());
    assertNull(complex.getDeletions());
    assertNull(complex.getId());
    assertNull(complex.getStartTime());
    assertNotNull(complex.getStatus());
    assertNull(changeListResult.pageToken());
    options.put(DnsRpc.Option.FIELDS, "nextPageToken");
    options.put(DnsRpc.Option.PAGE_SIZE, 1);
    changeListResult = RPC.listChangeRequests(ZONE1.getName(), options);
    changes = ImmutableList.copyOf(changeListResult.results());
    complex = changes.get(0);
    assertNull(complex.getAdditions());
    assertNull(complex.getDeletions());
    assertNull(complex.getId());
    assertNull(complex.getStartTime());
    assertNull(complex.getStatus());
    assertNotNull(changeListResult.pageToken());
}

14. LocalDnsHelperTest#executeCreateAndApplyChangeTest()

Project: gcloud-java
File: LocalDnsHelperTest.java
private static void executeCreateAndApplyChangeTest(DnsRpc rpc) {
    rpc.create(ZONE1, EMPTY_RPC_OPTIONS);
    assertNull(rpc.getChangeRequest(ZONE1.getName(), "1", EMPTY_RPC_OPTIONS));
    // add
    Change createdChange = rpc.applyChangeRequest(ZONE1.getName(), CHANGE1, EMPTY_RPC_OPTIONS);
    assertEquals(CHANGE1.getAdditions(), createdChange.getAdditions());
    assertEquals(CHANGE1.getDeletions(), createdChange.getDeletions());
    assertNotNull(createdChange.getStartTime());
    assertEquals("1", createdChange.getId());
    // necessary for the following to return 409
    waitForChangeToComplete(rpc, ZONE1.getName(), "1");
    try {
        rpc.applyChangeRequest(ZONE1.getName(), CHANGE1, EMPTY_RPC_OPTIONS);
        fail();
    } catch (DnsException ex) {
        assertEquals(409, ex.code());
        assertTrue(ex.getMessage().contains("already exists"));
    }
    assertNotNull(rpc.getChangeRequest(ZONE1.getName(), "1", EMPTY_RPC_OPTIONS));
    assertNull(rpc.getChangeRequest(ZONE1.getName(), "2", EMPTY_RPC_OPTIONS));
    // delete
    rpc.applyChangeRequest(ZONE1.getName(), CHANGE2, EMPTY_RPC_OPTIONS);
    assertNotNull(rpc.getChangeRequest(ZONE1.getName(), "1", EMPTY_RPC_OPTIONS));
    assertNotNull(rpc.getChangeRequest(ZONE1.getName(), "2", EMPTY_RPC_OPTIONS));
    waitForChangeToComplete(rpc, ZONE1.getName(), "2");
    rpc.applyChangeRequest(ZONE1.getName(), CHANGE_KEEP, EMPTY_RPC_OPTIONS);
    waitForChangeToComplete(rpc, ZONE1.getName(), "3");
    Iterable<ResourceRecordSet> results = rpc.listRecordSets(ZONE1.getName(), EMPTY_RPC_OPTIONS).results();
    List<String> defaults = ImmutableList.of("SOA", "NS");
    boolean rrsetKeep = false;
    boolean rrset1 = false;
    for (ResourceRecordSet dnsRecord : results) {
        if (dnsRecord.getName().equals(RRSET_KEEP.getName()) && dnsRecord.getType().equals(RRSET_KEEP.getType())) {
            rrsetKeep = true;
        } else if (dnsRecord.getName().equals(RRSET1.getName()) && dnsRecord.getType().equals(RRSET1.getType())) {
            rrset1 = true;
        } else if (!defaults.contains(dnsRecord.getType())) {
            fail(String.format("Record with type %s should not exist", dnsRecord.getType()));
        }
    }
    assertTrue(rrset1);
    assertTrue(rrsetKeep);
}

15. ChangeRequestInfoTest#testDateParsing()

Project: gcloud-java
File: ChangeRequestInfoTest.java
@Test
public void testDateParsing() {
    // obtained from service
    String startTime = "2016-01-26T18:33:43.512Z";
    Change change = CHANGE.toPb().setStartTime(startTime);
    ChangeRequestInfo converted = ChangeRequest.fromPb(change);
    assertNotNull(converted.startTimeMillis());
    assertEquals(change, converted.toPb());
    assertEquals(change.getStartTime(), converted.toPb().getStartTime());
}

16. OptionParsers#extractFields()

Project: gcloud-java
File: OptionParsers.java
static Change extractFields(Change fullChange, String... fields) {
    if (fields == null || fields.length == 0) {
        return fullChange;
    }
    Change change = new Change();
    for (String field : fields) {
        switch(field) {
            case "additions":
                change.setAdditions(fullChange.getAdditions());
                break;
            case "deletions":
                change.setDeletions(fullChange.getDeletions());
                break;
            case "id":
                change.setId(fullChange.getId());
                break;
            case "startTime":
                change.setStartTime(fullChange.getStartTime());
                break;
            case "status":
                change.setStatus(fullChange.getStatus());
                break;
            default:
                break;
        }
    }
    return change;
}

17. LocalDnsHelper#listChanges()

Project: gcloud-java
File: LocalDnsHelper.java
/**
   * Lists changes. Next page token is the ID of the last change listed.
   */
@VisibleForTesting
Response listChanges(String projectId, String zoneName, String query) {
    Map<String, Object> options = OptionParsers.parseListChangesOptions(query);
    Response response = checkListOptions(options);
    if (response != null) {
        return response;
    }
    ZoneContainer zoneContainer = findZone(projectId, zoneName);
    if (zoneContainer == null) {
        return Error.NOT_FOUND.response(String.format("The 'parameters.managedZone' resource named '%s' does not exist", zoneName));
    }
    // take a sorted snapshot of the current change list
    NavigableMap<Integer, Change> changes = new TreeMap<>();
    for (Change c : zoneContainer.changes()) {
        if (c.getId() != null) {
            changes.put(Integer.valueOf(c.getId()), c);
        }
    }
    String[] fields = (String[]) options.get("fields");
    String sortOrder = (String) options.get("sortOrder");
    String pageToken = (String) options.get("pageToken");
    Integer maxResults = options.get("maxResults") == null ? null : Integer.valueOf((String) options.get("maxResults"));
    // as the only supported field is change sequence, we are not reading sortBy
    NavigableSet<Integer> keys;
    if ("descending".equals(sortOrder)) {
        keys = changes.descendingKeySet();
    } else {
        keys = changes.navigableKeySet();
    }
    Integer from = null;
    try {
        from = Integer.valueOf(pageToken);
    } catch (NumberFormatException ex) {
    }
    keys = from != null ? keys.tailSet(from, false) : keys;
    NavigableMap<Integer, Change> fragment = from != null && changes.containsKey(from) ? changes.tailMap(from, false) : changes;
    boolean sizeReached = false;
    boolean hasMorePages = false;
    LinkedList<String> serializedResults = new LinkedList<>();
    String lastChangeId = null;
    for (Integer key : keys) {
        Change change = fragment.get(key);
        if (sizeReached) {
            // we do not add this, just note that there would be more and there should be a token
            hasMorePages = true;
            break;
        } else {
            lastChangeId = change.getId();
            try {
                serializedResults.addLast(jsonFactory.toString(OptionParsers.extractFields(change, fields)));
            } catch (IOException e) {
                return Error.INTERNAL_ERROR.response(String.format("Error when serializing change %s in managed zone %s in project %s", lastChangeId, zoneName, projectId));
            }
        }
        sizeReached = maxResults != null && maxResults.equals(serializedResults.size());
    }
    boolean includePageToken = hasMorePages && (fields == null || Arrays.asList(fields).contains("nextPageToken"));
    return toListResponse(serializedResults, "changes", lastChangeId, includePageToken);
}