blob: 0d9515eee4097a0f2ad392f38d386db485f2ced6 [file] [log] [blame]
/**
* 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.apache.curator.x.discovery;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.curator.x.discovery.details.JsonInstanceSerializer;
import org.junit.jupiter.api.Test;
public class TestJsonInstanceSerializer
{
@Test
public void testBasic() throws Exception
{
JsonInstanceSerializer<String> serializer = new JsonInstanceSerializer<String>(String.class);
ServiceInstance<String> instance = new ServiceInstance<String>("name", "id", "address", 10, 20, "payload", 0, ServiceType.DYNAMIC, new UriSpec("{a}/b/{c}"), true);
byte[] bytes = serializer.serialize(instance);
ServiceInstance<String> rhs = serializer.deserialize(bytes);
assertEquals(instance, rhs);
assertEquals(instance.getId(), rhs.getId());
assertEquals(instance.getName(), rhs.getName());
assertEquals(instance.getPayload(), rhs.getPayload());
assertEquals(instance.getAddress(), rhs.getAddress());
assertEquals(instance.getPort(), rhs.getPort());
assertEquals(instance.getSslPort(), rhs.getSslPort());
assertEquals(instance.getUriSpec(), rhs.getUriSpec());
assertEquals(instance.isEnabled(), rhs.isEnabled());
}
@Test
public void testWrongPayloadType() throws Exception
{
JsonInstanceSerializer<String> stringSerializer = new JsonInstanceSerializer<String>(String.class);
JsonInstanceSerializer<Double> doubleSerializer = new JsonInstanceSerializer<Double>(Double.class);
byte[] bytes = stringSerializer.serialize(new ServiceInstance<String>("name", "id", "address", 10, 20, "payload", 0, ServiceType.DYNAMIC, new UriSpec("{a}/b/{c}"), true));
try
{
doubleSerializer.deserialize(bytes);
fail();
}
catch ( ClassCastException e )
{
// correct
}
}
@Test
public void testNoPayload() throws Exception
{
JsonInstanceSerializer<Void> serializer = new JsonInstanceSerializer<Void>(Void.class);
ServiceInstance<Void> instance = new ServiceInstance<Void>("name", "id", "address", 10, 20, null, 0, ServiceType.DYNAMIC, new UriSpec("{a}/b/{c}"), true);
byte[] bytes = serializer.serialize(instance);
ServiceInstance<Void> rhs = serializer.deserialize(bytes);
assertEquals(instance, rhs);
assertEquals(instance.getId(), rhs.getId());
assertEquals(instance.getName(), rhs.getName());
assertEquals(instance.getPayload(), rhs.getPayload());
assertEquals(instance.getAddress(), rhs.getAddress());
assertEquals(instance.getPort(), rhs.getPort());
assertEquals(instance.getSslPort(), rhs.getSslPort());
assertEquals(instance.getUriSpec(), rhs.getUriSpec());
assertEquals(instance.isEnabled(), rhs.isEnabled());
}
@Test
public void testNoEnabledState() throws Exception
{
JsonInstanceSerializer<Void> serializer = new JsonInstanceSerializer<Void>(Void.class);
byte[] bytes = "{}".getBytes("utf-8");
ServiceInstance<Void> instance = serializer.deserialize(bytes);
assertTrue(instance.isEnabled(), "Instance that has no 'enabled' should be assumed enabled");
}
@Test
public void testPayloadAsList() throws Exception
{
JsonInstanceSerializer<Object> serializer = new JsonInstanceSerializer<Object>(Object.class, false);
List<String> payload = new ArrayList<String>();
payload.add("Test value 1");
payload.add("Test value 2");
ServiceInstance<Object> instance = new ServiceInstance<Object>("name", "id", "address", 10, 20, payload, 0, ServiceType.DYNAMIC, new UriSpec("{a}/b/{c}"), false);
byte[] bytes = serializer.serialize(instance);
ServiceInstance<Object> rhs = serializer.deserialize(bytes);
assertEquals(instance, rhs);
assertEquals(instance.getId(), rhs.getId());
assertEquals(instance.getName(), rhs.getName());
assertEquals(instance.getPayload(), rhs.getPayload());
assertEquals(instance.getAddress(), rhs.getAddress());
assertEquals(instance.getPort(), rhs.getPort());
assertEquals(instance.getSslPort(), rhs.getSslPort());
assertEquals(instance.getUriSpec(), rhs.getUriSpec());
assertEquals(instance.isEnabled(), rhs.isEnabled());
}
@Test
public void testPayloadAsMap() throws Exception
{
JsonInstanceSerializer<Object> serializer = new JsonInstanceSerializer<Object>(Object.class, false);
Map<String,String> payload = new HashMap<String,String>();
payload.put("1", "Test value 1");
payload.put("2", "Test value 2");
ServiceInstance<Object> instance = new ServiceInstance<Object>("name", "id", "address", 10, 20, payload, 0, ServiceType.DYNAMIC, new UriSpec("{a}/b/{c}"), false);
byte[] bytes = serializer.serialize(instance);
ServiceInstance<Object> rhs = serializer.deserialize(bytes);
assertEquals(instance, rhs);
assertEquals(instance.getId(), rhs.getId());
assertEquals(instance.getName(), rhs.getName());
assertEquals(instance.getPayload(), rhs.getPayload());
assertEquals(instance.getAddress(), rhs.getAddress());
assertEquals(instance.getPort(), rhs.getPort());
assertEquals(instance.getSslPort(), rhs.getSslPort());
assertEquals(instance.getUriSpec(), rhs.getUriSpec());
assertEquals(instance.isEnabled(), rhs.isEnabled());
}
@Test
public void testPayloadClass() throws Exception
{
JsonInstanceSerializer<Payload> serializer = new JsonInstanceSerializer<Payload>(Payload.class);
Payload payload = new Payload();
payload.setVal("Test value");
ServiceInstance<Payload> instance = new ServiceInstance<Payload>("name", "id", "address", 10, 20, payload, 0, ServiceType.DYNAMIC, new UriSpec("{a}/b/{c}"), true);
byte[] bytes = serializer.serialize(instance);
ServiceInstance<Payload> rhs = serializer.deserialize(bytes);
assertEquals(instance, rhs);
assertEquals(instance.getId(), rhs.getId());
assertEquals(instance.getName(), rhs.getName());
assertEquals(instance.getPayload(), rhs.getPayload());
assertEquals(instance.getAddress(), rhs.getAddress());
assertEquals(instance.getPort(), rhs.getPort());
assertEquals(instance.getSslPort(), rhs.getSslPort());
assertEquals(instance.getUriSpec(), rhs.getUriSpec());
assertEquals(instance.isEnabled(), rhs.isEnabled());
}
public static class Payload {
private String val;
public String getVal() {
return val;
}
public Payload()
{
}
public Payload(String val)
{
this.val = val;
}
public void setVal(String val) {
this.val = val;
}
@Override
public boolean equals(Object other) {
if (other == null || !(other instanceof Payload)) return false;
String otherVal = ((Payload)other).getVal();
if (val == null) return val == otherVal;
return val.equals(otherVal);
}
}
}