/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This 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 software 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 software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.wildfly.clustering.marshalling.jboss; import static org.junit.Assert.*; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.UUID; import org.jboss.marshalling.Marshalling; import org.jboss.marshalling.MarshallingConfiguration; import org.junit.Test; /** * Unit tests for SimpleMarshalledValue. * * @author Brian Stansberry */ public class SimpleMarshalledValueFactoryTestCase { private final MarshallingContext context; private final SimpleMarshalledValueFactory factory; public SimpleMarshalledValueFactoryTestCase() { MarshallingConfigurationRepository repository = new MarshallingConfigurationRepository() { @Override public int getCurrentMarshallingVersion() { return 0; } @Override public MarshallingConfiguration getMarshallingConfiguration(int version) { assertEquals(0, version); return new MarshallingConfiguration(); } }; this.context = new SimpleMarshallingContext(Marshalling.getMarshallerFactory("river", Marshalling.class.getClassLoader()), repository, Thread.currentThread().getContextClassLoader()); this.factory = this.createFactory(this.context); } SimpleMarshalledValueFactory createFactory(MarshallingContext context) { return new SimpleMarshalledValueFactory(context); } /** * Test method for {@link org.jboss.ha.framework.server.SimpleMarshalledValue#get()}. */ @Test public void get() throws Exception { UUID uuid = UUID.randomUUID(); SimpleMarshalledValue<UUID> mv = this.factory.createMarshalledValue(uuid); assertNotNull(mv.peek()); assertSame(uuid, mv.peek()); assertSame(uuid, mv.get(this.context)); SimpleMarshalledValue<UUID> copy = replicate(mv); assertNull(copy.peek()); UUID uuid2 = copy.get(this.context); assertNotSame(uuid, uuid2); assertEquals(uuid, uuid2); copy = replicate(copy); uuid2 = copy.get(this.context); assertEquals(uuid, uuid2); mv = this.factory.createMarshalledValue(null); assertNull(mv.peek()); assertNull(mv.getBytes()); assertNull(mv.get(this.context)); } /** * Test method for {@link org.jboss.ha.framework.server.SimpleMarshalledValue#equals(java.lang.Object)}. */ @Test public void equals() throws Exception { UUID uuid = UUID.randomUUID(); SimpleMarshalledValue<UUID> mv = this.factory.createMarshalledValue(uuid); assertTrue(mv.equals(mv)); assertFalse(mv.equals(null)); SimpleMarshalledValue<UUID> dup = this.factory.createMarshalledValue(uuid); assertTrue(mv.equals(dup)); assertTrue(dup.equals(mv)); SimpleMarshalledValue<UUID> replica = replicate(mv); assertTrue(mv.equals(replica)); assertTrue(replica.equals(mv)); SimpleMarshalledValue<UUID> nulled = this.factory.createMarshalledValue(null); assertFalse(mv.equals(nulled)); assertFalse(nulled.equals(mv)); assertFalse(replica.equals(nulled)); assertFalse(nulled.equals(replica)); assertTrue(nulled.equals(nulled)); assertFalse(nulled.equals(null)); assertTrue(nulled.equals(this.factory.createMarshalledValue(null))); } /** * Test method for {@link org.jboss.ha.framework.server.SimpleMarshalledValue#hashCode()}. */ @Test public void testHashCode() throws Exception { UUID uuid = UUID.randomUUID(); SimpleMarshalledValue<UUID> mv = this.factory.createMarshalledValue(uuid); assertEquals(uuid.hashCode(), mv.hashCode()); SimpleMarshalledValue<UUID> copy = replicate(mv); this.validateHashCode(uuid, copy); mv = this.factory.createMarshalledValue(null); assertEquals(0, mv.hashCode()); } <T> void validateHashCode(T original, SimpleMarshalledValue<T> copy) { assertEquals(0, copy.hashCode()); } @SuppressWarnings("unchecked") <V> SimpleMarshalledValue<V> replicate(SimpleMarshalledValue<V> mv) throws IOException, ClassNotFoundException { return (SimpleMarshalledValue<V>) unmarshall(marshall(mv)); } private static byte[] marshall(Object mv) throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); try (ObjectOutputStream oos = new ObjectOutputStream(baos)) { oos.writeObject(mv); } return baos.toByteArray(); } private static Object unmarshall(byte[] bytes) throws IOException, ClassNotFoundException { ByteArrayInputStream bais = new ByteArrayInputStream(bytes); try (ObjectInputStream ois = new ObjectInputStream(bais)) { return ois.readObject(); } } }