Package org.springframework.xd.dirt.container.store

Source Code of org.springframework.xd.dirt.container.store.ZooKeeperAdminRepositoryTests$ZooKeeperAdminRepositoryTestsConfig

/*
* Copyright 2014 the original author or authors.
*
* Licensed 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.springframework.xd.dirt.container.store;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;

import java.util.UUID;

import org.apache.curator.framework.CuratorFramework;
import org.apache.zookeeper.KeeperException;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.junit.runner.RunWith;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.xd.dirt.cluster.Admin;
import org.springframework.xd.dirt.cluster.AdminAttributes;
import org.springframework.xd.dirt.container.store.ZooKeeperAdminRepositoryTests.ZooKeeperAdminRepositoryTestsConfig;
import org.springframework.xd.dirt.zookeeper.EmbeddedZooKeeper;
import org.springframework.xd.dirt.zookeeper.Paths;
import org.springframework.xd.dirt.zookeeper.ZooKeeperAccessException;
import org.springframework.xd.dirt.zookeeper.ZooKeeperConnection;

/**
* Tests for {@link ZooKeeperAdminRepository}.
*
* @author Janne Valkealahti
*/
@ContextConfiguration(classes = ZooKeeperAdminRepositoryTestsConfig.class)
@RunWith(SpringJUnit4ClassRunner.class)
public class ZooKeeperAdminRepositoryTests {

  @Autowired
  private AdminRepository adminRepository;

  @Autowired
  private ZooKeeperConnection zooKeeperConnection;

  private final String id = "test" + UUID.randomUUID().toString();

  private final String id2 = "test" + UUID.randomUUID().toString();

  private final int pid = 123;

  private final String host = "test";

  private final String ip = "127.0.0.1";

  @Rule
  public ExpectedException exception = ExpectedException.none();

  @Before
  public void setUp() throws Exception {
    try {
      zooKeeperConnection.getClient().create().creatingParentsIfNeeded().forPath(Paths.ADMINS);
    }
    catch (KeeperException.NodeExistsException e) {
      // ignore
    }

    AdminAttributes adminAttributes = new AdminAttributes(id).setPid(pid).setHost(host).setIp(ip);
    Admin entity = new Admin(id, adminAttributes);
    Admin savedAdmin = adminRepository.save(entity);
    assertNotNull(savedAdmin);
    AdminAttributes savedAttributes = savedAdmin.getAttributes();
    assertEquals(id, savedAttributes.getId());
    assertEquals(pid, savedAttributes.getPid());
    assertEquals(host, savedAttributes.getHost());
    assertEquals(ip, savedAttributes.getIp());

    adminAttributes = new AdminAttributes(id2).setPid(pid).setHost(host).setIp(ip);
    entity = new Admin(id2, adminAttributes);
    savedAdmin = adminRepository.save(entity);
    assertNotNull(savedAdmin);
    assertSavedAdmin(id2, adminAttributes);
  }

  @Test
  public void findContainerAttributesById() {
    Admin foundAdmin = adminRepository.findOne(id);
    assertNotNull(foundAdmin);
    AdminAttributes attributes = foundAdmin.getAttributes();
    assertNotNull(attributes);
    assertEquals(id, attributes.getId());
    assertEquals(pid, attributes.getPid());
    assertEquals(host, attributes.getHost());
    assertEquals(ip, attributes.getIp());
  }

  @Test
  public void updateContainerAttributes() {
    Admin foundAdmin = adminRepository.findOne(id);
    assertNotNull(foundAdmin);
    AdminAttributes adminAttributes = new AdminAttributes(id).setPid(12345).setHost("randomHost").setIp(
        "randomIP");
    Admin entity = new Admin(id, adminAttributes);
    adminRepository.update(entity);
    assertSavedAdmin(id, adminAttributes);
  }

  @Test
  public void updateNonExistingContainer() {
    exception.expect(ZooKeeperAccessException.class);
    exception.expectMessage("Could not find admin with id " + id + 10);
    AdminAttributes adminAttributes = new AdminAttributes(id + 10).setPid(12345).setHost("randomHost").setIp(
        "randomIP");
    Admin entity = new Admin(id + 10, adminAttributes);
    adminRepository.update(entity);
  }

  /**
   * Assert if the saved container exists in the {@link ContainerRepository}
   *
   * @param id the containerId
   * @param adminAttributes the admin attributes
   */
  private void assertSavedAdmin(String id, AdminAttributes adminAttributes) {
    long timeout = System.currentTimeMillis() + 15000;
    boolean foundAdmin = false;
    while (!foundAdmin && System.currentTimeMillis() < timeout) {
      try {
        Thread.sleep(200);
        Admin admin = adminRepository.findOne(id);
        if (admin != null && compareAdminAttributes(admin.getAttributes(), adminAttributes)) {
          foundAdmin = true;
        }
      }
      catch (InterruptedException e) {
        Thread.currentThread().interrupt();
        break;
      }
    }
    assertTrue("Admin repository is not updated with the test containers", foundAdmin);
  }

  /**
   * Check if the admin attributes equal.
   *
   * @param attr1 admin attributes
   * @param attr2 admin attributes
   * @return true if the admin attributes match
   */
  private boolean compareAdminAttributes(AdminAttributes attr1, AdminAttributes attr2) {
    return (attr1.getId().equals(attr2.getId()) &&
        attr1.getHost().equals(attr2.getHost()) &&
        attr1.getIp().equals(attr2.getIp()) && (attr1.getPid() == attr2.getPid()));
  }

  @Configuration
  public static class ZooKeeperAdminRepositoryTestsConfig {

    @Bean
    public EmbeddedZooKeeper embeddedZooKeeper() {
      return new EmbeddedZooKeeper();
    }

    @Bean
    public ZooKeeperConnection zooKeeperConnection() {
      return new ZooKeeperConnection("localhost:" + embeddedZooKeeper().getClientPort());
    }

    @Bean
    public AdminRepository adminRepository() {
      return new ZooKeeperAdminRepository(zooKeeperConnection());
    }

  }

  @After
  public void tearDown() throws Exception {
    CuratorFramework client = zooKeeperConnection.getClient();
    for (String path : client.getChildren().forPath(Paths.ADMINS)) {
      client.delete().deletingChildrenIfNeeded().forPath(Paths.build(Paths.ADMINS, path));
    }
  }

}
TOP

Related Classes of org.springframework.xd.dirt.container.store.ZooKeeperAdminRepositoryTests$ZooKeeperAdminRepositoryTestsConfig

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.