blob: 6a57cd9b54d4b9f1a31bfc2b14c54edc01851640 [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.slider.registry.curator
import groovy.util.logging.Slf4j
import org.apache.curator.x.discovery.ServiceInstance
import org.apache.curator.x.discovery.ServiceInstanceBuilder
import org.apache.curator.x.discovery.UriSpec
import org.apache.slider.core.persist.JsonSerDeser
import org.apache.slider.core.registry.info.ServiceInstanceData
import org.apache.slider.server.services.curator.CuratorServiceInstance
import org.junit.Test
/**
* Here to identify why curator was complaining about deserializing
* its own published artifacts.
*
* ... its a Jackson version thing
*/
@Slf4j
class TestServiceInstanceSerDeser {
JsonSerDeser<ServiceInstance> serializer = new JsonSerDeser<>(
ServiceInstance.class)
JsonSerDeser<CuratorServiceInstance> deser = new JsonSerDeser<>(
CuratorServiceInstance.class)
@Test
public void testDefault() throws Throwable {
def builder = ServiceInstance.builder()
builder.name("defined")
buildAndRoundTrip("testDefault", builder)
}
@Test
public void testEmpty() throws Throwable {
def builder = ServiceInstance.builder()
builder.address(null).id("").name("").port(0).uriSpec(null)
buildAndRoundTrip("testEmpty", builder)
}
@Test
public void testFilled() throws Throwable {
def builder = ServiceInstance.builder()
builder.id("service").name("name").port(0)
.uriSpec(new UriSpec("http:{}:{}"))
buildAndRoundTrip("testFilled", builder)
}
@Test
public void testPayload() throws Throwable {
def builder = ServiceInstance.builder()
builder.address(null).id("testPayload").name("").port(0).uriSpec(null)
ServiceInstanceData data = new ServiceInstanceData()
data.serviceType = "testPayload"
data.externalView.documentsURL = "http://documents"
builder.payload(data)
def instance = buildAndRoundTrip("", builder)
def payload = instance.payload as ServiceInstanceData
log.info("payload = $payload")
assert payload.externalView.documentsURL == "http://documents"
}
@Test
public void testHackedDeser() throws Throwable {
def builder = ServiceInstance.builder()
builder.address("localhost")
builder.id("service").name("name").port(8080)
.uriSpec(new UriSpec("http:{}:{}"))
.sslPort(443)
ServiceInstanceData data = new ServiceInstanceData()
data.externalView.documentsURL = "http://documents"
builder.payload(data)
log.info("Test: testHackedDeser")
String json = serialize(builder)
CuratorServiceInstance<ServiceInstanceData> curatorInstance = deser.fromJson(json)
log.info("resolved =$curatorInstance")
def payload = curatorInstance.payload
log.info("payload = $payload")
assert payload.externalView.documentsURL == "http://documents"
}
def buildAndRoundTrip(String testname, ServiceInstanceBuilder builder) {
log.info("Test: $testname")
String json = serialize(builder)
return serializer.fromJson(json)
}
def String serialize(ServiceInstanceBuilder builder) {
ServiceInstance<ServiceInstanceData> instance = builder.build()
def json = serializer.toJson(instance)
log.info(json)
return json
}
}