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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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); }