/* * 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.solr.cloud; import org.apache.solr.SolrTestCaseJ4; import org.apache.solr.common.SolrException; import org.apache.solr.common.util.NamedList; import org.apache.solr.common.util.SimpleOrderedMap; public class OverseerSolrResponseTest extends SolrTestCaseJ4 { public void testEmpty() { assertSerializeDeserialize(new NamedList<Object>()); } public void testWithSingleObject() { NamedList<Object> responseNl = new NamedList<>(); responseNl.add("foo", "bar"); assertSerializeDeserialize(responseNl); } public void testWithMultipleObject() { NamedList<Object> responseNl = new NamedList<>(); responseNl.add("foo", "bar"); responseNl.add("foobar", "foo"); assertSerializeDeserialize(responseNl); } public void testRepeatedKeys() { NamedList<Object> responseNl = new NamedList<>(); responseNl.add("foo", "bar"); responseNl.add("foo", "zoo"); assertSerializeDeserialize(responseNl); } public void testNested() { NamedList<Object> responseNl = new NamedList<>(); NamedList<Object> response2 = new NamedList<>(); response2.add("foo", "bar"); responseNl.add("foo", response2); assertSerializeDeserialize(responseNl); } public void testException() { NamedList<Object> responseNl = new NamedList<>(); SolrException e = new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Foo"); SimpleOrderedMap<Object> exceptionNl = new SimpleOrderedMap<>(); exceptionNl.add("msg", e.getMessage()); exceptionNl.add("rspCode", e.code()); responseNl.add("exception", exceptionNl); OverseerSolrResponse deserialized = OverseerSolrResponseSerializer.deserialize(OverseerSolrResponseSerializer.serialize(new OverseerSolrResponse(responseNl))); assertNotNull("Expecting an exception", deserialized.getException()); assertEquals("Unexpected exception type in deserialized response", SolrException.class, deserialized.getException().getClass()); assertEquals("Unexpected exception code in deserialized response", e.code(), ((SolrException)deserialized.getException()).code()); assertEquals("Unexpected exception message in deserialized response", e.getMessage(), deserialized.getException().getMessage()); } private void assertSerializeDeserialize(NamedList<Object> content) { OverseerSolrResponse response = new OverseerSolrResponse(content); byte[] serialized = OverseerSolrResponseSerializer.serialize(response); OverseerSolrResponse deserialized = OverseerSolrResponseSerializer.deserialize(serialized); assertEquals("Deserialized response is different than original", response.getResponse(), deserialized.getResponse()); } }