// This file is part of OpenTSDB.
// Copyright (C) 2014 The OpenTSDB Authors.
//
// This program is free software: you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 2.1 of the License, or (at your
// option) any later version. This program is distributed in the hope that it
// will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
// General Public License for more details. You should have received a copy
// of the GNU Lesser General Public License along with this program. If not,
// see <http://www.gnu.org/licenses/>.
package net.opentsdb.utils;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import com.fasterxml.jackson.core.type.TypeReference;
public class TestPair {
@Test
public void defaultCtor() {
final Pair<String, String> pair = new Pair<String, String>();
assertNotNull(pair);
assertNull(pair.getKey());
assertNull(pair.getValue());
}
@Test
public void ctorWithArgs() {
final Pair<String, String> pair = new Pair<String, String>("host", "web01");
assertNotNull(pair);
assertEquals("host", pair.getKey());
assertEquals("web01", pair.getValue());
}
@Test
public void ctorWithNullKey() {
final Pair<String, String> pair = new Pair<String, String>(null, "web01");
assertNotNull(pair);
assertNull(pair.getKey());
assertEquals("web01", pair.getValue());
}
@Test
public void ctorWithNullValue() {
final Pair<String, String> pair = new Pair<String, String>("host", null);
assertNotNull(pair);
assertEquals("host", pair.getKey());
assertNull(pair.getValue());
}
@Test
public void ctorWithNulls() {
final Pair<String, String> pair = new Pair<String, String>(null, null);
assertNotNull(pair);
assertNull(pair.getKey());
assertNull(pair.getValue());
}
@Test
public void hashcodeTest() {
final Pair<String, String> pair = new Pair<String, String>("host", "web01");
assertEquals(109885949, pair.hashCode());
}
@Test
public void hashcodeTestNullKey() {
final Pair<String, String> pair = new Pair<String, String>(null, "web01");
assertEquals(113003605, pair.hashCode());
}
@Test
public void hashcodeTestNullValue() {
final Pair<String, String> pair = new Pair<String, String>("host", null);
assertEquals(3208616, pair.hashCode());
}
@Test
public void hashcodeTestNulls() {
final Pair<String, String> pair = new Pair<String, String>();
assertEquals(0, pair.hashCode());
}
@Test
public void equalsTest() {
final Pair<String, String> pair = new Pair<String, String>("host", "web01");
final Pair<String, String> pair2 = new Pair<String, String>("host", "web01");
assertTrue(pair.equals(pair2));
}
@Test
public void equalsTestSameReference() {
final Pair<String, String> pair = new Pair<String, String>("host", "web01");
final Pair<String, String> pair2 = pair;
assertTrue(pair.equals(pair2));
}
@Test
public void equalsTestDiffKey() {
final Pair<String, String> pair = new Pair<String, String>("host", "web01");
final Pair<String, String> pair2 = new Pair<String, String>("diff", "web01");
assertFalse(pair.equals(pair2));
}
@Test
public void equalsTestDiffVal() {
final Pair<String, String> pair = new Pair<String, String>("host", "web01");
final Pair<String, String> pair2 = new Pair<String, String>("host", "diff");
assertFalse(pair.equals(pair2));
}
@Test
public void equalsTestDiffNullKey() {
final Pair<String, String> pair = new Pair<String, String>("host", "web01");
final Pair<String, String> pair2 = new Pair<String, String>(null, "web01");
assertFalse(pair.equals(pair2));
}
@Test
public void equalsTestDiffNullVal() {
final Pair<String, String> pair = new Pair<String, String>("host", "web01");
final Pair<String, String> pair2 = new Pair<String, String>("host", null);
assertFalse(pair.equals(pair2));
}
@Test
public void equalsTestNullKeys() {
final Pair<String, String> pair = new Pair<String, String>(null, "web01");
final Pair<String, String> pair2 = new Pair<String, String>(null, "web01");
assertTrue(pair.equals(pair2));
}
@Test
public void equalsTestNullValues() {
final Pair<String, String> pair = new Pair<String, String>("host", null);
final Pair<String, String> pair2 = new Pair<String, String>("host", null);
assertTrue(pair.equals(pair2));
}
@Test
public void equalsTestNulls() {
final Pair<String, String> pair = new Pair<String, String>();
final Pair<String, String> pair2 = new Pair<String, String>();
assertTrue(pair.equals(pair2));
}
@Test
public void equalsTestDiffTypes() {
final Pair<String, String> pair = new Pair<String, String>("host", "web01");
final Pair<Integer, Integer> pair2 = new Pair<Integer, Integer>(1, 42);
assertFalse(pair.equals(pair2));
}
@Test
public void toStringTest() {
final Pair<String, String> pair = new Pair<String, String>("host", "web01");
assertEquals("key=host, value=web01", pair.toString());
}
@Test
public void toStringTestNulls() {
final Pair<String, String> pair = new Pair<String, String>();
assertEquals("key=null, value=null", pair.toString());
}
@Test
public void toStringTestNumbers() {
final Pair<Integer, Long> pair = new Pair<Integer, Long>(1, 42L);
assertEquals("key=1, value=42", pair.toString());
}
@Test
public void serdes() {
final Pair<String, String> ser = new Pair<String, String>("host", "web01");
final String json = JSON.serializeToString(ser);
assertEquals("{\"key\":\"host\",\"value\":\"web01\"}", json);
@SuppressWarnings("unchecked")
final Pair<String, String> des = JSON.parseToObject(json, Pair.class);
assertEquals("host", des.getKey());
assertEquals("web01", des.getValue());
}
@Test
public void serdesNulls() {
final Pair<String, String> ser = new Pair<String, String>();
final String json = JSON.serializeToString(ser);
assertEquals("{\"key\":null,\"value\":null}", json);
@SuppressWarnings("unchecked")
final Pair<String, String> des = JSON.parseToObject(json, Pair.class);
assertNull(des.getKey());
assertNull(des.getValue());
}
@Test
public void serdesList() {
final List<Pair<String, String>> ser =
new ArrayList<Pair<String, String>>(2);
ser.add(new Pair<String, String>("host", "web01"));
ser.add(new Pair<String, String>(null, "keyisnull"));
final String json = JSON.serializeToString(ser);
assertEquals("[{\"key\":\"host\",\"value\":\"web01\"}," +
"{\"key\":null,\"value\":\"keyisnull\"}]", json);
final TypeReference<List<Pair<String, String>>> TR =
new TypeReference<List<Pair<String, String>>>() {};
final List<Pair<String, String>> des = JSON.parseToObject(json, TR);
assertEquals(2, des.size());
assertEquals("host", des.get(0).getKey());
assertEquals("web01", des.get(0).getValue());
assertNull(des.get(1).getKey());
assertEquals("keyisnull", des.get(1).getValue());
}
@Test
public void rawObjects() {
final Pair<Object, Object> pair = new Pair<Object, Object>("host", "web01");
assertNotNull(pair);
assertEquals("host", pair.getKey());
assertEquals("web01", pair.getValue());
}
}