blob: 9c0c60a04eca2497075fb9770ff78018c3a71514 [file] [log] [blame]
package org.apache.helix.manager.zk;
/*
* 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.
*/
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.helix.PropertyPathBuilder;
import org.apache.helix.TestHelper;
import org.apache.helix.ZNRecord;
import org.apache.helix.ZkUnitTestBase;
import org.apache.helix.manager.zk.client.HelixZkClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.AssertJUnit;
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
public class TestZKUtil extends ZkUnitTestBase {
private static Logger LOG = LoggerFactory.getLogger(TestZKUtil.class);
String clusterName = CLUSTER_PREFIX + "_" + getShortClassName();
@BeforeClass()
public void beforeClass() throws Exception {
boolean result = ZKUtil.isClusterSetup(clusterName, _gZkClient);
AssertJUnit.assertFalse(result);
result = ZKUtil.isClusterSetup(null, _gZkClient);
AssertJUnit.assertFalse(result);
result = ZKUtil.isClusterSetup(null, (HelixZkClient) null);
AssertJUnit.assertFalse(result);
result = ZKUtil.isClusterSetup(clusterName, (HelixZkClient) null);
AssertJUnit.assertFalse(result);
TestHelper.setupEmptyCluster(_gZkClient, clusterName);
}
@AfterClass()
public void afterClass() {
deleteCluster(clusterName);
}
@AfterMethod()
public void afterMethod() {
String path = PropertyPathBuilder.instanceConfig(clusterName);
_gZkClient.deleteRecursively(path);
_gZkClient.createPersistent(path);
}
@Test()
public void testIsClusterSetup() {
boolean result = ZKUtil.isClusterSetup(clusterName, _gZkClient);
AssertJUnit.assertTrue(result);
}
@Test()
public void testChildrenOperations() {
List<ZNRecord> list = new ArrayList<ZNRecord>();
list.add(new ZNRecord("id1"));
list.add(new ZNRecord("id2"));
String path = PropertyPathBuilder.instanceConfig(clusterName);
ZKUtil.createChildren(_gZkClient, path, list);
list = ZKUtil.getChildren(_gZkClient, path);
AssertJUnit.assertEquals(2, list.size());
ZKUtil.dropChildren(_gZkClient, path, list);
ZKUtil.dropChildren(_gZkClient, path, new ZNRecord("id1"));
list = ZKUtil.getChildren(_gZkClient, path);
AssertJUnit.assertEquals(0, list.size());
ZKUtil.dropChildren(_gZkClient, path, (List<ZNRecord>) null);
}
@Test()
public void testUpdateIfExists() {
String path = PropertyPathBuilder.instanceConfig(clusterName, "id3");
ZNRecord record = new ZNRecord("id4");
ZKUtil.updateIfExists(_gZkClient, path, record, false);
AssertJUnit.assertFalse(_gZkClient.exists(path));
_gZkClient.createPersistent(path);
ZKUtil.updateIfExists(_gZkClient, path, record, false);
AssertJUnit.assertTrue(_gZkClient.exists(path));
record = _gZkClient.readData(path);
AssertJUnit.assertEquals("id4", record.getId());
}
@Test()
public void testSubtract() {
String path = PropertyPathBuilder.instanceConfig(clusterName, "id5");
ZNRecord record = new ZNRecord("id5");
record.setSimpleField("key1", "value1");
_gZkClient.createPersistent(path, record);
ZKUtil.subtract(_gZkClient, path, record);
record = _gZkClient.readData(path);
AssertJUnit.assertNull(record.getSimpleField("key1"));
}
@Test()
public void testNullChildren() {
String path = PropertyPathBuilder.instanceConfig(clusterName, "id6");
ZKUtil.createChildren(_gZkClient, path, (List<ZNRecord>) null);
}
@Test()
public void testCreateOrMerge() {
String path = PropertyPathBuilder.instanceConfig(clusterName, "id7");
ZNRecord record = new ZNRecord("id7");
List<String> list = Arrays.asList("value1");
record.setListField("list", list);
ZKUtil.createOrMerge(_gZkClient, path, record, true, true);
record = _gZkClient.readData(path);
AssertJUnit.assertEquals(list, record.getListField("list"));
record = new ZNRecord("id7");
List<String> list2 = Arrays.asList("value2");
record.setListField("list", list2);
ZKUtil.createOrMerge(_gZkClient, path, record, true, true);
record = _gZkClient.readData(path);
AssertJUnit.assertEquals(Arrays.asList("value1", "value2"), record.getListField("list"));
Map<String, String> map = new HashMap<String, String>() {{
put("k1", "v1");
}};
record.setMapField("map", map);
ZKUtil.createOrMerge(_gZkClient, path, record, true, true);
record = _gZkClient.readData(path);
AssertJUnit.assertEquals(map, record.getMapField("map"));
record = new ZNRecord("id7");
Map<String, String> map2 = new HashMap<String, String>() {{
put("k2", "v2");
}};
record.setMapField("map", map2);
ZKUtil.createOrMerge(_gZkClient, path, record, true, true);
record = _gZkClient.readData(path);
AssertJUnit.assertEquals(new HashMap<String, String>() {{
put("k1", "v1");
put("k2", "v2");
}}, record.getMapField("map"));
}
@Test()
public void testCreateOrReplace() {
String path = PropertyPathBuilder.instanceConfig(clusterName, "id8");
ZNRecord record = new ZNRecord("id8");
ZKUtil.createOrReplace(_gZkClient, path, record, true);
record = _gZkClient.readData(path);
AssertJUnit.assertEquals("id8", record.getId());
record = new ZNRecord("id9");
ZKUtil.createOrReplace(_gZkClient, path, record, true);
record = _gZkClient.readData(path);
AssertJUnit.assertEquals("id9", record.getId());
}
@Test()
public void testCreateOrUpdate() {
String path = PropertyPathBuilder.instanceConfig(clusterName, "id9");
ZNRecord record = new ZNRecord("id9");
ZKUtil.createOrMerge(_gZkClient, path, record, true, true);
record = _gZkClient.readData(path);
AssertJUnit.assertEquals("id9", record.getId());
record = new ZNRecord("id9");
List<String> list = Arrays.asList("value1", "value2");
record.setListField("list", list);
ZKUtil.createOrUpdate(_gZkClient, path, record, true, true);
record = _gZkClient.readData(path);
AssertJUnit.assertEquals(list, record.getListField("list"));
record = new ZNRecord("id9");
List<String> list2 = Arrays.asList("value3", "value4");
record.setListField("list", list2);
ZKUtil.createOrUpdate(_gZkClient, path, record, true, true);
record = _gZkClient.readData(path);
AssertJUnit.assertEquals(list2, record.getListField("list"));
Map<String, String> map = new HashMap<String, String>() {{
put("k1", "v1");
}};
record.setMapField("map", map);
ZKUtil.createOrUpdate(_gZkClient, path, record, true, true);
record = _gZkClient.readData(path);
AssertJUnit.assertEquals(map, record.getMapField("map"));
record = new ZNRecord("id9");
Map<String, String> map2 = new HashMap<String, String>() {{
put("k2", "v2");
}};
record.setMapField("map", map2);
ZKUtil.createOrUpdate(_gZkClient, path, record, true, true);
record = _gZkClient.readData(path);
AssertJUnit.assertEquals(new HashMap<String, String>() {{
put("k2", "v2");
}}, record.getMapField("map"));
}
}