Package org.jclouds.rackspace.clouddns.v1.features

Source Code of org.jclouds.rackspace.clouddns.v1.features.RecordApiLiveTest

/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License.  You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jclouds.rackspace.clouddns.v1.features;

import static org.jclouds.rackspace.clouddns.v1.predicates.JobPredicates.awaitComplete;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertTrue;

import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeoutException;

import org.jclouds.rackspace.clouddns.v1.domain.CreateDomain;
import org.jclouds.rackspace.clouddns.v1.domain.Domain;
import org.jclouds.rackspace.clouddns.v1.domain.Record;
import org.jclouds.rackspace.clouddns.v1.domain.RecordDetail;
import org.jclouds.rackspace.clouddns.v1.functions.RecordFunctions;
import org.jclouds.rackspace.clouddns.v1.internal.BaseCloudDNSApiLiveTest;
import org.testng.annotations.AfterClass;
import org.testng.annotations.Test;

import com.google.common.base.Function;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Maps;

/**
* @author Everett Toews
*/
@Test(groups = "live", singleThreaded = true, testName = "RecordApiLiveTest")
public class RecordApiLiveTest extends BaseCloudDNSApiLiveTest {

   // just in case the username has a '.' we replace it to avoid creating subdomains
   private static final String JCLOUDS_EXAMPLE = System.getProperty("user.name").replace('.', '-') + "-recordtest-jclouds.org";
  
   private int domainId;
   private String aRecordId;
   private String srvRecordId;
   private String mxRecordId;

   @Test
   public void testCreateDomain() throws Exception {
      CreateDomain createDomain = CreateDomain.builder()
            .name(JCLOUDS_EXAMPLE)
            .email("jclouds@" + JCLOUDS_EXAMPLE)
            .ttl(60000)
            .build();

      Iterable<CreateDomain> createDomains = ImmutableList.of(createDomain);     
      Domain domain = awaitComplete(api, api.getDomainApi().create(createDomains)).iterator().next();
     
      assertEquals(domain.getName(), JCLOUDS_EXAMPLE);
      assertEquals(domain.getEmail(), "jclouds@" + JCLOUDS_EXAMPLE);
      assertTrue(domain.getRecords().isEmpty());
     
      domainId = domain.getId();
   }  

   @Test(dependsOnMethods = "testCreateDomain")
   public void testCreateRecords() throws Exception {
      Record createMXRecord = Record.builder()
            .type("MX")
            .name(JCLOUDS_EXAMPLE)
            .data("mail." + JCLOUDS_EXAMPLE)
            .comment("MX Record")
            .priority(11235)
            .build();
     
      Record createARecord = Record.builder()
            .type("A")
            .name(JCLOUDS_EXAMPLE)
            .data("10.0.0.1")
            .build();
     
      Record createSRVRecord = Record.builder()
            .type("SRV")
            .name("_sip._tcp." + JCLOUDS_EXAMPLE)
            .ttl(86400)
            .data("1 3443 sip." + JCLOUDS_EXAMPLE) // weight port target
            .priority(11235)
            .comment("Updated Protocol to UDP")
            .build();

      List<Record> createRecords = ImmutableList.of(createMXRecord, createARecord, createSRVRecord);
      Set<RecordDetail> records = awaitComplete(api, api.getRecordApiForDomain(domainId).create(createRecords));

      Thread.sleep(1000);
      Date now = new Date();
     
      RecordDetail mxRecord = null;
      RecordDetail aRecord = null;
      RecordDetail srvRecord = null;
     
      for (RecordDetail record: records) {
         if (record.getType().equals("MX")) {
            mxRecord = record;
         } else if (record.getType().equals("A")) {
            aRecord = record;
         } else if (record.getType().equals("SRV")) {
            srvRecord = record;
         }
      }
     
      assertNotNull(mxRecord.getId());
      assertEquals(mxRecord.getType(), "MX");
      assertEquals(mxRecord.getName(), JCLOUDS_EXAMPLE);
      assertEquals(mxRecord.getPriority().intValue(), 11235);
      assertEquals(mxRecord.getComment(), "MX Record");
      assertEquals(mxRecord.getTTL(), 60000);
      assertTrue(mxRecord.getCreated().before(now));
      assertTrue(mxRecord.getUpdated().before(now));
     
      assertNotNull(aRecord.getId());
      assertEquals(aRecord.getType(), "A");
      assertEquals(aRecord.getName(), JCLOUDS_EXAMPLE);
      assertEquals(aRecord.getData(), "10.0.0.1");
      assertNull(aRecord.getPriority());
      assertEquals(aRecord.getTTL(), 60000);
      assertTrue(aRecord.getCreated().before(now));
      assertTrue(aRecord.getUpdated().before(now));
     
      assertNotNull(srvRecord.getId());
      assertEquals(srvRecord.getType(), "SRV");
      assertEquals(srvRecord.getName(), "_sip._tcp." + JCLOUDS_EXAMPLE);
      assertEquals(srvRecord.getData(), "1 3443 sip." + JCLOUDS_EXAMPLE);
      assertEquals(srvRecord.getPriority().intValue(), 11235);
      assertEquals(srvRecord.getTTL(), 86400);
      assertTrue(srvRecord.getCreated().before(now));
      assertTrue(srvRecord.getUpdated().before(now));
   }

   @Test(dependsOnMethods = "testCreateRecords")
   public void testListRecords() throws Exception {
      Set<RecordDetail> records = api.getRecordApiForDomain(domainId).list().concat().toSet();
      assertEquals(records.size(), 5); // 3 created above + 2 nameserver (NS) records
   }

   @Test(dependsOnMethods = "testListRecords")
   public void testListRecordsByCriteriaMethods() throws Exception {
      List<RecordDetail> records = api.getRecordApiForDomain(domainId).listByType("SRV").concat().toList();
      assertEquals(records.size(), 1);
     
      srvRecordId = records.get(0).getId();

      records = api.getRecordApiForDomain(domainId).listByTypeAndData("A", "10.0.0.1").concat().toList();
      assertEquals(records.size(), 1);
     
      aRecordId = records.get(0).getId();

      records = api.getRecordApiForDomain(domainId).listByNameAndType(JCLOUDS_EXAMPLE, "MX").concat().toList();
      assertEquals(records.size(), 1);
     
      mxRecordId = records.get(0).getId();
   }

   @Test(dependsOnMethods = "testListRecordsByCriteriaMethods")
   public void testGetRecordByNameAndTypeAndData() throws Exception {
      RecordDetail record = api.getRecordApiForDomain(domainId).getByNameAndTypeAndData(JCLOUDS_EXAMPLE, "A", "10.0.0.1");
      Date now = new Date();
     
      assertNotNull(record.getId());
      assertEquals(record.getName(), JCLOUDS_EXAMPLE);
      assertEquals(record.getType(), "A");
      assertEquals(record.getData(), "10.0.0.1");
      assertEquals(record.getTTL(), 60000);
      assertTrue(record.getCreated().before(now));
      assertTrue(record.getUpdated().before(now));
   }

   @Test(dependsOnMethods = "testGetRecordByNameAndTypeAndData")
   public void testGetRecord() throws Exception {
      RecordDetail record = api.getRecordApiForDomain(domainId).get(aRecordId);
      Date now = new Date();
     
      assertNotNull(record.getId());
      assertEquals(record.getName(), JCLOUDS_EXAMPLE);
      assertEquals(record.getType(), "A");
      assertEquals(record.getData(), "10.0.0.1");
      assertEquals(record.getTTL(), 60000);
      assertTrue(record.getCreated().before(now));
      assertTrue(record.getUpdated().before(now));
   }

   @Test(dependsOnMethods = "testGetRecord")
   public void testUpdateRecord() throws Exception {     
      Record record = Record.builder()
            .name("_sip._udp." + JCLOUDS_EXAMPLE)
            .ttl(86401)
            .data("1 3444 sip." + JCLOUDS_EXAMPLE) // weight port target
            .priority(12358)
            .comment("Updated Protocol to UDP")
            .build();

      awaitComplete(api, api.getRecordApiForDomain(domainId).update(srvRecordId, record));

      RecordDetail srvRecord = api.getRecordApiForDomain(domainId).get(srvRecordId);
      Date now = new Date();
     
      assertNotNull(srvRecord.getId());
      assertEquals(srvRecord.getType(), "SRV");
      assertEquals(srvRecord.getName(), "_sip._udp." + JCLOUDS_EXAMPLE);
      assertEquals(srvRecord.getData(), "1 3444 sip." + JCLOUDS_EXAMPLE);
      assertEquals(srvRecord.getPriority().intValue(), 12358);
      assertEquals(srvRecord.getTTL(), 86401);
      assertEquals(srvRecord.getComment(), "Updated Protocol to UDP");
      assertTrue(srvRecord.getCreated().before(now));
      assertTrue(srvRecord.getUpdated().before(now));     
   }

   @Test(dependsOnMethods = "testUpdateRecord")
   public void testUpdateRecords() throws Exception {     
      Set<RecordDetail> recordDetails = api.getRecordApiForDomain(domainId).list().concat().toSet();
      Map<String, Record> idsToRecords = RecordFunctions.toRecordMap(recordDetails);
      Map<String, Record> updateRecords = Maps.transformValues(idsToRecords, updateTTLAndComment(35813, "New TTL"));
           
      awaitComplete(api, api.getRecordApiForDomain(domainId).update(updateRecords));

      RecordDetail record = api.getRecordApiForDomain(domainId).get(aRecordId);
      Date now = new Date();
     
      assertNotNull(record.getId());
      assertEquals(record.getName(), JCLOUDS_EXAMPLE);
      assertEquals(record.getType(), "A");
      assertEquals(record.getData(), "10.0.0.1");
      assertEquals(record.getTTL(), 35813);
      assertEquals(record.getComment(), "New TTL");
      assertTrue(record.getCreated().before(now));
      assertTrue(record.getUpdated().before(now));
     
      recordDetails = api.getRecordApiForDomain(domainId).list().concat().toSet();
     
      for (RecordDetail recordDetail: recordDetails) {
         assertEquals(recordDetail.getTTL(), 35813);
         assertEquals(recordDetail.getComment(), "New TTL");
      }
   }

   private Function<Record, Record> updateTTLAndComment(final int ttl, final String comment) {
      return new Function<Record, Record>() {
         public Record apply(Record record) {
            return record.toBuilder().ttl(ttl).comment(comment).build();
         }
      };
   }

   @Test(dependsOnMethods = "testUpdateRecords")
   public void testDeleteRecord() throws Exception {     
      awaitComplete(api, api.getRecordApiForDomain(domainId).delete(aRecordId));
     
      assertNull(api.getRecordApiForDomain(domainId).get(aRecordId));
   }

   @Test(dependsOnMethods = "testDeleteRecord")
   public void testDeleteRecords() throws Exception {     
      List<String> recordIds = ImmutableList.<String> of(srvRecordId, mxRecordId);
     
      awaitComplete(api, api.getRecordApiForDomain(domainId).delete(recordIds));
     
      assertNull(api.getRecordApiForDomain(domainId).get(srvRecordId));
      assertNull(api.getRecordApiForDomain(domainId).get(mxRecordId));
   }

   @Override
   @AfterClass(groups = { "integration", "live" })
   protected void tearDown() {
      try {
         awaitComplete(api, api.getDomainApi().delete(ImmutableList.<Integer> of(domainId), true));
      }
      catch (TimeoutException e) {
         e.printStackTrace();
      }
      super.tearDown();
   }
}
TOP

Related Classes of org.jclouds.rackspace.clouddns.v1.features.RecordApiLiveTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.