/*
* Copyright 2008-2009 LinkedIn, Inc
*
* Licensed 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 voldemort.xml;
import java.io.StringReader;
import java.util.List;
import junit.framework.TestCase;
import voldemort.VoldemortTestConstants;
import voldemort.store.StoreDefinition;
public class StoreDefinitionMapperTest extends TestCase {
public void testParsing() {
StoreDefinitionsMapper mapper = new StoreDefinitionsMapper();
List<StoreDefinition> storeDefs = mapper.readStoreList(new StringReader(VoldemortTestConstants.getSimpleStoreDefinitionsXml()));
String output = mapper.writeStoreList(storeDefs);
List<StoreDefinition> found = mapper.readStoreList(new StringReader(output));
checkEquals(storeDefs, found);
for(StoreDefinition def: storeDefs) {
String xml = mapper.writeStore(def);
StoreDefinition newDef = mapper.readStore(new StringReader(xml));
assertEquals(def, newDef);
}
}
public void testSingleStore() {
StoreDefinitionsMapper mapper = new StoreDefinitionsMapper();
List<StoreDefinition> storeDefs = mapper.readStoreList(new StringReader(VoldemortTestConstants.getSingleStoreDefinitionsXml()));
String written = mapper.writeStoreList(storeDefs);
assertEquals(storeDefs, mapper.readStoreList(new StringReader(written)));
}
public void testNoVersionStore() {
StoreDefinitionsMapper mapper = new StoreDefinitionsMapper();
List<StoreDefinition> storeDefs = mapper.readStoreList(new StringReader(VoldemortTestConstants.getNoVersionStoreDefinitionsXml()));
String written = mapper.writeStoreList(storeDefs);
assertEquals(storeDefs, mapper.readStoreList(new StringReader(written)));
}
public void testSingleStoreWithZones() {
StoreDefinitionsMapper mapper = new StoreDefinitionsMapper();
List<StoreDefinition> storeDefs = mapper.readStoreList(new StringReader(VoldemortTestConstants.getSingleStoreWithZonesXml()));
String written = mapper.writeStoreList(storeDefs);
assertEquals(storeDefs, mapper.readStoreList(new StringReader(written)));
}
public void testTwoVersionsOnKeyFails() {
StoreDefinitionsMapper mapper = new StoreDefinitionsMapper();
try {
mapper.readStoreList(new StringReader(VoldemortTestConstants.getStoreWithTwoKeyVersions()));
fail("There are multiple versions on the key serializer, which should not be allowed.");
} catch(MappingException e) {
// this is good
}
}
public void testRetentionStore() {
StoreDefinitionsMapper mapper = new StoreDefinitionsMapper();
List<StoreDefinition> storeDefs = mapper.readStoreList(new StringReader(VoldemortTestConstants.getStoreDefinitionsWithRetentionXml()));
String written = mapper.writeStoreList(storeDefs);
assertEquals(storeDefs, mapper.readStoreList(new StringReader(written)));
}
public void testCompressedStore() {
StoreDefinitionsMapper mapper = new StoreDefinitionsMapper();
List<StoreDefinition> storeDefs = mapper.readStoreList(new StringReader(VoldemortTestConstants.getCompressedStoreDefinitionsXml()));
String written = mapper.writeStoreList(storeDefs);
assertEquals(storeDefs, mapper.readStoreList(new StringReader(written)));
}
public void testView() {
StoreDefinitionsMapper mapper = new StoreDefinitionsMapper();
List<StoreDefinition> storeDefs = mapper.readStoreList(new StringReader(VoldemortTestConstants.getViewStoreDefinitionXml()));
String written = mapper.writeStoreList(storeDefs);
checkEquals(storeDefs, mapper.readStoreList(new StringReader(written)));
}
private void checkEquals(List<StoreDefinition> l1, List<StoreDefinition> l2) {
assertEquals(l1.size(), l2.size());
for(int i = 0; i < l1.size(); i++)
assertEquals(l1.get(i), l2.get(i));
}
}