Package com.mongodb.hadoop

Source Code of com.mongodb.hadoop.TreasuryTest

package com.mongodb.hadoop;

import com.jayway.awaitility.Awaitility;
import com.mongodb.BasicDBObject;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.MongoClientURI;
import com.mongodb.hadoop.testutils.BaseHadoopTest;
import com.mongodb.hadoop.util.MongoClientURIBuilder;
import org.junit.After;
import org.junit.Before;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.math.BigDecimal;
import java.math.MathContext;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.TimeUnit;

import static java.lang.String.format;
import static org.junit.Assert.assertEquals;

public class TreasuryTest extends BaseHadoopTest {
    private static final Logger LOG = LoggerFactory.getLogger(TreasuryTest.class);
   
    public static final File TREASURY_YIELD_HOME;
    public static final File TREASURY_JSON_PATH;
    private final MongoClientURI outputUri;
    private final MongoClientURI inputUri;
    private final List<DBObject> reference = new ArrayList<DBObject>();
    protected static final File JOBJAR_PATH;

    static {
        TREASURY_YIELD_HOME = new File(PROJECT_HOME, "examples/treasury_yield");
        TREASURY_JSON_PATH = new File(TreasuryTest.TREASURY_YIELD_HOME, "/src/main/resources/yield_historical_in.json");
        JOBJAR_PATH = findProjectJar(TreasuryTest.TREASURY_YIELD_HOME);
    }

    public TreasuryTest() {
        reference.add(dbObject("_id", 1990, "count", 250, "avg", 8.552400000000002, "sum", 2138.1000000000004));
        reference.add(dbObject("_id", 1991, "count", 250, "avg", 7.8623600000000025, "sum", 1965.5900000000006));
        reference.add(dbObject("_id", 1992, "count", 251, "avg", 7.008844621513946, "sum", 1759.2200000000005));
        reference.add(dbObject("_id", 1993, "count", 250, "avg", 5.866279999999999, "sum", 1466.5699999999997));
        reference.add(dbObject("_id", 1994, "count", 249, "avg", 7.085180722891565, "sum", 1764.2099999999996));
        reference.add(dbObject("_id", 1995, "count", 250, "avg", 6.573920000000002, "sum", 1643.4800000000005));
        reference.add(dbObject("_id", 1996, "count", 252, "avg", 6.443531746031742, "sum", 1623.769999999999));
        reference.add(dbObject("_id", 1997, "count", 250, "avg", 6.353959999999992, "sum", 1588.489999999998));
        reference.add(dbObject("_id", 1998, "count", 250, "avg", 5.262879999999994, "sum", 1315.7199999999984));
        reference.add(dbObject("_id", 1999, "count", 251, "avg", 5.646135458167332, "sum", 1417.1800000000003));
        reference.add(dbObject("_id", 2000, "count", 251, "avg", 6.030278884462145, "sum", 1513.5999999999985));
        reference.add(dbObject("_id", 2001, "count", 248, "avg", 5.02068548387097, "sum", 1245.1300000000006));
        reference.add(dbObject("_id", 2002, "count", 250, "avg", 4.61308, "sum", 1153.27));
        reference.add(dbObject("_id", 2003, "count", 250, "avg", 4.013879999999999, "sum", 1003.4699999999997));
        reference.add(dbObject("_id", 2004, "count", 250, "avg", 4.271320000000004, "sum", 1067.8300000000008));
        reference.add(dbObject("_id", 2005, "count", 250, "avg", 4.288880000000001, "sum", 1072.2200000000003));
        reference.add(dbObject("_id", 2006, "count", 250, "avg", 4.7949999999999955, "sum", 1198.7499999999989));
        reference.add(dbObject("_id", 2007, "count", 251, "avg", 4.634661354581674, "sum", 1163.3000000000002));
        reference.add(dbObject("_id", 2008, "count", 251, "avg", 3.6642629482071714, "sum", 919.73));
        reference.add(dbObject("_id", 2009, "count", 250, "avg", 3.2641200000000037, "sum", 816.0300000000009));
        reference.add(dbObject("_id", 2010, "count", 189, "avg", 3.3255026455026435, "sum", 628.5199999999996));
        inputUri = authCheck(new MongoClientURIBuilder()
                                 .collection("mongo_hadoop", "yield_historical.in")).build();
        outputUri = authCheck(new MongoClientURIBuilder()
                                  .collection("mongo_hadoop", "yield_historical.out")).build();
    }

    @Before
    public void setUp() {
        dropMongoHadoop();
        mongoImport("yield_historical.in", TreasuryTest.TREASURY_JSON_PATH);
    }

    @After
    public void dropMongoHadoop() {
        try {
            Awaitility
                .await()
                .atMost(5, TimeUnit.MINUTES)
                .until(new Callable<Boolean>() {
                    @Override
                    public Boolean call() throws Exception {
                        try {
                            getClient(getInputUri()).getDB("mongo_hadoop").dropDatabase();
                            return true;
                        } catch (Exception e) {
                            LOG.error(e.getMessage(), e);
                            return false;
                        }
                    }
                });
        } catch (Exception e) {
            LOG.info(e.getMessage(), e);
        }
    }

    protected void compareDoubled(final DBCollection out) {
        List<DBObject> referenceDoubled = new ArrayList<DBObject>();
        for (DBObject object : getReference()) {
            DBObject doubled = new BasicDBObject();
            doubled.putAll(object);
            referenceDoubled.add(doubled);
            Integer count = (Integer) object.get("count") * 2;
            Double sum = (Double) object.get("sum") * 2;

            doubled.put("count", count);
            doubled.put("avg", sum / count);
            doubled.put("sum", sum);
        }

        compareResults(out, referenceDoubled);
    }

    protected void compareResults(final DBCollection collection, final List<DBObject> expected) {
        List<DBObject> output = toList(collection.find().sort(new BasicDBObject("_id", 1)));
        assertEquals("count is not same: " + output, expected.size(), output.size());
        for (int i = 0; i < output.size(); i++) {
            final DBObject doc = output.get(i);
            // round to account for slight changes due to precision in case ops are run in different order.
            DBObject referenceDoc = expected.get(i);
            assertEquals(format("IDs[%s] do not match: %s%n vs %s", i, doc, referenceDoc), doc.get("_id"), referenceDoc.get("_id"));
            assertEquals(format("counts[%s] do not match: %s%n vs %s", i, doc, referenceDoc), doc.get("count"), referenceDoc.get("count"));
            assertEquals(format("averages[%s] do not match: %s%n vs %s", i, doc, referenceDoc),
                         round((Double) doc.get("avg"), 7),
                         round((Double) referenceDoc.get("avg"), 7));
        }
    }

    private BigDecimal round(final Double value, final int precision) {
        return new BigDecimal(value).round(new MathContext(precision));
    }

    public List<DBObject> getReference() {
        return reference;
    }

    public MongoClientURI getOutputUri() {
        return outputUri;
    }

    public MongoClientURI getInputUri() {
        return inputUri;
    }
}
TOP

Related Classes of com.mongodb.hadoop.TreasuryTest

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.