Package org.apache.marmotta.kiwi.test.externalizer

Source Code of org.apache.marmotta.kiwi.test.externalizer.ExternalizerTest

/*
* 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.marmotta.kiwi.test.externalizer;

import org.apache.commons.lang3.RandomStringUtils;
import org.apache.marmotta.commons.vocabulary.XSD;
import org.apache.marmotta.kiwi.infinispan.externalizer.*;
import org.apache.marmotta.kiwi.infinispan.remote.CustomJBossMarshaller;
import org.apache.marmotta.kiwi.model.rdf.*;
import org.apache.marmotta.kiwi.test.TestValueFactory;
import org.infinispan.commons.marshall.AdvancedExternalizer;
import org.infinispan.commons.marshall.StreamingMarshaller;
import org.infinispan.configuration.cache.CacheMode;
import org.infinispan.configuration.cache.Configuration;
import org.infinispan.configuration.cache.ConfigurationBuilder;
import org.infinispan.configuration.global.GlobalConfiguration;
import org.infinispan.configuration.global.GlobalConfigurationBuilder;
import org.infinispan.manager.DefaultCacheManager;
import org.infinispan.manager.EmbeddedCacheManager;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openrdf.model.Value;
import org.openrdf.model.ValueFactory;
import org.openrdf.model.vocabulary.OWL;
import org.openrdf.model.vocabulary.RDFS;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.*;
import java.util.Random;

/**
* Test the different externalizer implementations we provide for Infinispan
*
* @author Sebastian Schaffert (sschaffert@apache.org)
*/
public class ExternalizerTest {

    private static ValueFactory valueFactory = new TestValueFactory();

    private static Random rnd = new Random();

    private static Logger log = LoggerFactory.getLogger(ExternalizerTest.class);

    private static StreamingMarshaller marshaller, hotrod;


    @BeforeClass
    public static void setup() {
        AdvancedExternalizer[] externalizers =  new AdvancedExternalizer[] {
                new UriExternalizer(),
                new BNodeExternalizer(),
                new StringLiteralExternalizer(),
                new DateLiteralExternalizer(),
                new BooleanLiteralExternalizer(),
                new IntLiteralExternalizer(),
                new DoubleLiteralExternalizer(),
                new TripleExternalizer()
        };


        GlobalConfiguration globalConfiguration = new GlobalConfigurationBuilder()
                .transport()
                    .defaultTransport()
                .serialization()
                    .addAdvancedExternalizer(externalizers)
                .build();

        Configuration             defaultConfiguration = new ConfigurationBuilder()
                .clustering()
                    .cacheMode(CacheMode.DIST_ASYNC)
                .build();

        EmbeddedCacheManager cacheManager = new DefaultCacheManager(globalConfiguration, defaultConfiguration, true);

        marshaller = cacheManager.getCache().getAdvancedCache().getComponentRegistry().getCacheMarshaller();

        hotrod = new CustomJBossMarshaller();
    }


    @Test
    public void testUriResource() throws Exception {
        marshall((KiWiUriResource) valueFactory.createURI("http://localhost/" + RandomStringUtils.randomAlphanumeric(8)), new UriExternalizer());
    }

    @Test
    public void testCompressedUriResource() throws Exception {
        marshall((KiWiUriResource) valueFactory.createURI(XSD.Double.stringValue()), new UriExternalizer());
        marshall((KiWiUriResource) valueFactory.createURI(RDFS.LABEL.stringValue()), new UriExternalizer());
        marshall((KiWiUriResource) valueFactory.createURI(OWL.SAMEAS.stringValue()), new UriExternalizer());
    }


    @Test
    public void testBNode() throws Exception {
        marshall((KiWiAnonResource) valueFactory.createBNode(), new BNodeExternalizer());
    }

    @Test
    public void testStringLiteral() throws Exception {
        marshall((KiWiStringLiteral) valueFactory.createLiteral(RandomStringUtils.randomAscii(40)), new StringLiteralExternalizer());
    }

    @Test
    public void testLongStringLiteral() throws Exception {
        marshall((KiWiStringLiteral) valueFactory.createLiteral(RandomStringUtils.random(1000)), new StringLiteralExternalizer());
    }


    @Test
    public void testLangLiteral() throws Exception {
        marshall((KiWiStringLiteral) valueFactory.createLiteral(RandomStringUtils.randomAscii(40),"en"), new StringLiteralExternalizer());
    }

    @Test
    public void testTypeLiteral() throws Exception {
        marshall((KiWiStringLiteral) valueFactory.createLiteral(RandomStringUtils.randomAscii(40),valueFactory.createURI("http://localhost/" + RandomStringUtils.randomAlphanumeric(8))), new StringLiteralExternalizer());
    }


    @Test
    public void testIntLiteral() throws Exception {
        marshall((KiWiIntLiteral) valueFactory.createLiteral(rnd.nextInt()), new IntLiteralExternalizer());
    }


    @Test
    public void testTriple() throws Exception {
        KiWiUriResource s = (KiWiUriResource) valueFactory.createURI("http://localhost/" + RandomStringUtils.randomAlphanumeric(8));
        KiWiUriResource p = (KiWiUriResource) valueFactory.createURI("http://localhost/" + RandomStringUtils.randomAlphanumeric(8));
        KiWiNode o = (KiWiNode) randomNode();
        KiWiTriple t = (KiWiTriple) valueFactory.createStatement(s,p,o);

        marshall(t, new TripleExternalizer());
    }

    @Test
    public void testPrefixCompressedTriple() throws Exception {
        KiWiUriResource s = (KiWiUriResource) valueFactory.createURI("http://localhost/" + RandomStringUtils.randomAlphanumeric(8));
        KiWiUriResource p = (KiWiUriResource) valueFactory.createURI("http://localhost/" + RandomStringUtils.randomAlphanumeric(8));
        KiWiUriResource o = (KiWiUriResource) valueFactory.createURI("http://localhost/" + RandomStringUtils.randomAlphanumeric(8));
        KiWiTriple t = (KiWiTriple) valueFactory.createStatement(s,p,o);

        marshall(t, new TripleExternalizer());
    }


    /**
     * Run the given object through the marshaller using an in-memory stream.
     * @param origin
     * @param <T>
     * @return
     */
    private <T> void marshall(T origin, AdvancedExternalizer<T> externalizer) throws IOException, ClassNotFoundException, InterruptedException {
        log.info("- testing Java ObjectStream ...");
        ByteArrayOutputStream outBytesOS = new ByteArrayOutputStream();
        ObjectOutputStream outOS = new ObjectOutputStream(outBytesOS);

        outOS.writeObject(origin);

        outOS.close();

        log.info("  object {}: serialized with {} bytes", origin, outBytesOS.size());


        log.info("- testing externalizer directly ...");
        ByteArrayOutputStream outBytes = new ByteArrayOutputStream();
        ObjectOutputStream out = new ObjectOutputStream(outBytes);

        externalizer.writeObject(out, origin);
        out.close();

        log.info("  object {}: serialized with {} bytes", origin, outBytes.size());

        ByteArrayInputStream inBytes = new ByteArrayInputStream(outBytes.toByteArray());
        ObjectInputStream in = new ObjectInputStream(inBytes);

        T destination1 = externalizer.readObject(in);

        Assert.assertEquals(origin,destination1);
        assertEqualsId(origin,destination1);

        log.info("- testing externalizer with infinispan cluster marshaller ...");

        byte[] bytes = marshaller.objectToByteBuffer(origin);
        log.info("  object {}: serialized with {} bytes", origin, bytes.length);

        Object destination2 = marshaller.objectFromByteBuffer(bytes);

        Assert.assertEquals(origin, destination2);
        assertEqualsId(origin, destination2);



        log.info("- testing externalizer with infinispan hotrod marshaller ...");

        byte[] bytesH = hotrod.objectToByteBuffer(origin);
        log.info("  object {}: serialized with {} bytes", origin, bytesH.length);

        Object destination3 = hotrod.objectFromByteBuffer(bytesH);

        Assert.assertEquals(origin, destination3);
        assertEqualsId(origin, destination3);

    }


    /**
     * Return a random RDF value, either a reused object (10% chance) or of any other kind.
     * @return
     */
    protected Value randomNode() {
        Value object;
        switch(rnd.nextInt(6)) {
            case 0: object = valueFactory.createURI("http://localhost/" + RandomStringUtils.randomAlphanumeric(8));
                break;
            case 1: object = valueFactory.createBNode();
                break;
            case 2: object = valueFactory.createLiteral(RandomStringUtils.randomAscii(40));
                break;
            case 3: object = valueFactory.createLiteral(rnd.nextInt());
                break;
            case 4: object = valueFactory.createLiteral(rnd.nextDouble());
                break;
            case 5: object = valueFactory.createLiteral(rnd.nextBoolean());
                break;
            default: object = valueFactory.createURI("http://localhost/" + RandomStringUtils.randomAlphanumeric(8));
                break;

        }
        return object;
    }
     
    private static <T> void assertEqualsId(T o1, T o2) {
        if(o1 instanceof KiWiNode && o2 instanceof KiWiNode) {
            Assert.assertEquals(((KiWiNode) o1).getId(), ((KiWiNode) o2).getId());
        } else if(o1 instanceof KiWiTriple && o2 instanceof KiWiTriple) {
            Assert.assertEquals(((KiWiTriple) o1).getId(), ((KiWiTriple) o2).getId());
        }

    }

}
TOP

Related Classes of org.apache.marmotta.kiwi.test.externalizer.ExternalizerTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.