/** * Copyright 2011 LiveRamp * * 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 com.liveramp.hank.hadoop; import java.io.IOException; import java.util.Collections; import org.junit.Before; import org.junit.Test; import com.liveramp.hank.config.CoordinatorConfigurator; import com.liveramp.hank.coordinator.Coordinator; import com.liveramp.hank.coordinator.Domain; import com.liveramp.hank.coordinator.DomainVersion; import com.liveramp.hank.coordinator.mock.MockCoordinator; import com.liveramp.hank.coordinator.mock.MockDomain; import com.liveramp.hank.coordinator.mock.MockDomainVersion; import com.liveramp.hank.partition_server.DiskPartitionAssignment; import com.liveramp.hank.storage.Compactor; import com.liveramp.hank.storage.Writer; import com.liveramp.hank.storage.mock.MockStorageEngine; import static org.junit.Assert.assertEquals; public class TestHadoopDomainCompactor extends HadoopTestCase { private final String DOMAIN_A_NAME = "a"; private final String OUTPUT_PATH_A = OUTPUT_DIR + "/" + DOMAIN_A_NAME; public TestHadoopDomainCompactor() throws IOException { super(TestHadoopDomainCompactor.class); } @Before public void setUp() throws Exception { LocalMockCoordinatorConfigurator.compactor = new LocalMockCompactor(); LocalMockCoordinatorConfigurator.versionToCompact = new MockDomainVersion(0, (long)0); } private static class LocalMockCompactor implements Compactor { public DomainVersion versionToCompact; public int numCalls = 0; @Override public void compact(DomainVersion versionToCompact, Writer writer) throws IOException { this.versionToCompact = versionToCompact; ++numCalls; } @Override public void closeCoordinatorOpportunistically(Coordinator coordinator) { // No-op } } private static class LocalMockCoordinatorConfigurator implements CoordinatorConfigurator { private static LocalMockCompactor compactor; private static DomainVersion versionToCompact; @Override public Coordinator createCoordinator() { return new MockCoordinator() { @Override public Domain getDomain(String domainName) { return new MockDomain(domainName, 0, 2, null, new MockStorageEngine() { @Override public Compactor getCompactor(DiskPartitionAssignment configurator, int partitionNumber) throws IOException { return compactor; } }, Collections.<String, Object>emptyMap(), versionToCompact); } }; } } @Test public void testMain() throws IOException { CoordinatorConfigurator configurator = new LocalMockCoordinatorConfigurator(); DomainBuilderProperties properties = new DomainCompactorProperties(DOMAIN_A_NAME, 0, configurator).setOutputPath(OUTPUT_PATH_A); new HadoopDomainCompactor().buildHankDomain(properties, null); // Check that compactor was called with correct version twice assertEquals(2, LocalMockCoordinatorConfigurator.compactor.numCalls); assertEquals(LocalMockCoordinatorConfigurator.versionToCompact.getVersionNumber(), LocalMockCoordinatorConfigurator.compactor.versionToCompact.getVersionNumber()); } }