com.opengamma.transport.TaxonomyGatheringFudgeMessageSenderTest.java Source code

Java tutorial

Introduction

Here is the source code for com.opengamma.transport.TaxonomyGatheringFudgeMessageSenderTest.java

Source

/**
 * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
 *
 * Please see distribution for license.
 */
package com.opengamma.transport;

import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertTrue;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;
import java.util.Properties;

import org.apache.commons.io.FileUtils;
import org.fudgemsg.FudgeContext;
import org.fudgemsg.MutableFudgeMsg;
import org.testng.annotations.Test;

import com.opengamma.util.test.TestGroup;

/**
 * Test TaxonomyGatheringFudgeMessageSender.
 */
@Test(groups = TestGroup.INTEGRATION)
public class TaxonomyGatheringFudgeMessageSenderTest {

    public void noTaxonomyFileAvailableYet() throws IOException {
        File tmpFile = File.createTempFile("TaxonomyGatheringFudgeMessageSenderTest_noTaxonomyFileAvailableYet",
                ".properties");
        FileUtils.forceDelete(tmpFile);
        FileUtils.forceDeleteOnExit(tmpFile);

        FudgeContext context = new FudgeContext();
        CollectingFudgeMessageReceiver collectingReceiver = new CollectingFudgeMessageReceiver();
        ByteArrayFudgeMessageReceiver fudgeReceiver = new ByteArrayFudgeMessageReceiver(collectingReceiver);
        DirectInvocationByteArrayMessageSender byteArraySender = new DirectInvocationByteArrayMessageSender(
                fudgeReceiver);
        ByteArrayFudgeMessageSender fudgeSender = new ByteArrayFudgeMessageSender(byteArraySender, context);
        TaxonomyGatheringFudgeMessageSender gatheringSender = new TaxonomyGatheringFudgeMessageSender(fudgeSender,
                tmpFile.getAbsolutePath());

        assertTrue(gatheringSender.getCurrentTaxonomy().isEmpty());
    }

    @Test(timeOut = 10000)
    public void taxonomyGathering() throws IOException, InterruptedException {
        File tmpFile = File.createTempFile("TaxonomyGatheringFudgeMessageSenderTest_taxonomyGathering",
                ".properties");
        FileUtils.forceDelete(tmpFile);
        FileUtils.forceDeleteOnExit(tmpFile);

        FudgeContext context = new FudgeContext();
        CollectingFudgeMessageReceiver collectingReceiver = new CollectingFudgeMessageReceiver();
        ByteArrayFudgeMessageReceiver fudgeReceiver = new ByteArrayFudgeMessageReceiver(collectingReceiver);
        DirectInvocationByteArrayMessageSender byteArraySender = new DirectInvocationByteArrayMessageSender(
                fudgeReceiver);
        ByteArrayFudgeMessageSender fudgeSender = new ByteArrayFudgeMessageSender(byteArraySender, context);
        TaxonomyGatheringFudgeMessageSender gatheringSender = new TaxonomyGatheringFudgeMessageSender(fudgeSender,
                tmpFile.getAbsolutePath(), context, 1000L);

        MutableFudgeMsg msg1 = context.newMessage();
        msg1.add("name1", 1);
        msg1.add("name2", 1);
        msg1.add("name3", 1);
        msg1.add("name1", 1);
        MutableFudgeMsg msg2 = context.newMessage();
        msg1.add("name4", msg2);
        msg2.add(14, 1);
        msg2.add("name5", "foo");

        gatheringSender.send(msg1);

        assertTrue(gatheringSender.getCurrentTaxonomy().containsKey("name1"));
        assertTrue(gatheringSender.getCurrentTaxonomy().containsKey("name2"));
        assertTrue(gatheringSender.getCurrentTaxonomy().containsKey("name3"));
        assertTrue(gatheringSender.getCurrentTaxonomy().containsKey("name4"));
        assertTrue(gatheringSender.getCurrentTaxonomy().containsKey("name5"));
        assertEquals(5, gatheringSender.getCurrentTaxonomy().size());

        Properties props = new Properties();
        gatheringSender.waitForNextWrite();
        InputStream is = new FileInputStream(tmpFile);
        props.load(new BufferedInputStream(is));
        is.close();

        for (Map.Entry<Object, Object> propEntry : props.entrySet()) {
            Integer ordinal = gatheringSender.getCurrentTaxonomy().get(propEntry.getValue());
            assertEquals(ordinal.intValue(), Integer.parseInt((String) propEntry.getKey()));
        }
        assertEquals(5, props.size());
    }

    @Test(timeOut = 20000)
    public void validFileLoadingOnStartup() throws IOException, InterruptedException {
        File tmpFile = File.createTempFile("TaxonomyGatheringFudgeMessageSenderTest_validFileLoadingOnStartup",
                ".properties");
        FileUtils.forceDelete(tmpFile);
        FileUtils.forceDeleteOnExit(tmpFile);

        FudgeContext context = new FudgeContext();
        CollectingFudgeMessageReceiver collectingReceiver = new CollectingFudgeMessageReceiver();
        ByteArrayFudgeMessageReceiver fudgeReceiver = new ByteArrayFudgeMessageReceiver(collectingReceiver);
        DirectInvocationByteArrayMessageSender byteArraySender = new DirectInvocationByteArrayMessageSender(
                fudgeReceiver);
        ByteArrayFudgeMessageSender fudgeSender = new ByteArrayFudgeMessageSender(byteArraySender, context);
        TaxonomyGatheringFudgeMessageSender gatheringSender = new TaxonomyGatheringFudgeMessageSender(fudgeSender,
                tmpFile.getAbsolutePath(), context, 1000L);

        MutableFudgeMsg msg1 = context.newMessage();
        msg1.add("name1", 1);
        msg1.add("name2", 1);
        msg1.add("name3", 1);
        msg1.add("name1", 1);
        MutableFudgeMsg msg2 = context.newMessage();
        msg1.add("name4", msg2);
        msg2.add(14, 1);
        msg2.add("name5", "foo");

        gatheringSender.send(msg1);
        gatheringSender.waitForNextWrite();
        gatheringSender.getTimer().cancel();

        // Now reload the file.
        gatheringSender = new TaxonomyGatheringFudgeMessageSender(fudgeSender, tmpFile.getAbsolutePath(), context,
                5000L);
        assertTrue(gatheringSender.getCurrentTaxonomy().containsKey("name1"));
        assertTrue(gatheringSender.getCurrentTaxonomy().containsKey("name2"));
        assertTrue(gatheringSender.getCurrentTaxonomy().containsKey("name3"));
        assertTrue(gatheringSender.getCurrentTaxonomy().containsKey("name4"));
        assertTrue(gatheringSender.getCurrentTaxonomy().containsKey("name5"));
        assertEquals(5, gatheringSender.getCurrentTaxonomy().size());
    }

}