/* * The Alluxio Open Foundation licenses this work under the Apache License, version 2.0 * (the "License"). You may not use this work except in compliance with the License, which is * available at www.apache.org/licenses/LICENSE-2.0 * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, * either express or implied, as more fully set forth in the License. * * See the NOTICE file distributed with this work for information regarding copyright ownership. */ package alluxio; import com.google.common.collect.ImmutableMap; import org.junit.Assert; import org.junit.Test; import java.io.Closeable; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * Unit tests for {@link StorageTierAssoc}. */ public final class StorageTierAssocTest { private void checkStorageTierAssoc(StorageTierAssoc assoc, PropertyKey levelsProperty, PropertyKey.Template template) { int size = Configuration.getInt(levelsProperty); Assert.assertEquals(size, assoc.size()); List<String> expectedOrderedAliases = new ArrayList<>(); for (int i = 0; i < size; i++) { String alias = Configuration.get(template.format(i)); Assert.assertEquals(i, assoc.getOrdinal(alias)); Assert.assertEquals(alias, assoc.getAlias(i)); expectedOrderedAliases.add(alias); } Assert.assertEquals(expectedOrderedAliases, assoc.getOrderedStorageAliases()); } /** * Tests the constructors of the {@link MasterStorageTierAssoc} and {@link WorkerStorageTierAssoc} * classes with a {@link Configuration}. */ @Test public void masterWorkerConfConstructor() throws Exception { try (Closeable c = new ConfigurationRule(ImmutableMap.of( PropertyKey.MASTER_TIERED_STORE_GLOBAL_LEVELS, "3", PropertyKey.Template.MASTER_TIERED_STORE_GLOBAL_LEVEL_ALIAS.format(2), "BOTTOM", PropertyKey.WORKER_TIERED_STORE_LEVELS, "2", PropertyKey.Template.WORKER_TIERED_STORE_LEVEL_ALIAS.format(1), "BOTTOM")) .toResource()) { checkStorageTierAssoc(new MasterStorageTierAssoc(), PropertyKey.MASTER_TIERED_STORE_GLOBAL_LEVELS, PropertyKey.Template.MASTER_TIERED_STORE_GLOBAL_LEVEL_ALIAS); checkStorageTierAssoc(new WorkerStorageTierAssoc(), PropertyKey.WORKER_TIERED_STORE_LEVELS, PropertyKey.Template.WORKER_TIERED_STORE_LEVEL_ALIAS); } } /** * Tests the constructors of the {@link MasterStorageTierAssoc} and {@link WorkerStorageTierAssoc} * classes with different storage alias. */ @Test public void storageAliasListConstructor() { List<String> orderedAliases = Arrays.asList("MEM", "HDD", "SOMETHINGELSE", "SSD"); MasterStorageTierAssoc masterAssoc = new MasterStorageTierAssoc(orderedAliases); WorkerStorageTierAssoc workerAssoc = new WorkerStorageTierAssoc(orderedAliases); Assert.assertEquals(orderedAliases.size(), masterAssoc.size()); Assert.assertEquals(orderedAliases.size(), workerAssoc.size()); for (int i = 0; i < orderedAliases.size(); i++) { String alias = orderedAliases.get(i); Assert.assertEquals(alias, masterAssoc.getAlias(i)); Assert.assertEquals(i, masterAssoc.getOrdinal(alias)); Assert.assertEquals(alias, workerAssoc.getAlias(i)); Assert.assertEquals(i, workerAssoc.getOrdinal(alias)); } Assert.assertEquals(orderedAliases, masterAssoc.getOrderedStorageAliases()); Assert.assertEquals(orderedAliases, workerAssoc.getOrderedStorageAliases()); } @Test public void interpretTier() throws Exception { Assert.assertEquals(0, StorageTierAssoc.interpretOrdinal(0, 1)); Assert.assertEquals(0, StorageTierAssoc.interpretOrdinal(1, 1)); Assert.assertEquals(0, StorageTierAssoc.interpretOrdinal(2, 1)); Assert.assertEquals(0, StorageTierAssoc.interpretOrdinal(-1, 1)); Assert.assertEquals(0, StorageTierAssoc.interpretOrdinal(-2, 1)); Assert.assertEquals(0, StorageTierAssoc.interpretOrdinal(-3, 1)); Assert.assertEquals(0, StorageTierAssoc.interpretOrdinal(Constants.FIRST_TIER, 1)); Assert.assertEquals(0, StorageTierAssoc.interpretOrdinal(Constants.SECOND_TIER, 1)); Assert.assertEquals(0, StorageTierAssoc.interpretOrdinal(Constants.LAST_TIER, 1)); Assert.assertEquals(0, StorageTierAssoc.interpretOrdinal(0, 10)); Assert.assertEquals(8, StorageTierAssoc.interpretOrdinal(8, 10)); Assert.assertEquals(9, StorageTierAssoc.interpretOrdinal(9, 10)); Assert.assertEquals(9, StorageTierAssoc.interpretOrdinal(10, 10)); Assert.assertEquals(9, StorageTierAssoc.interpretOrdinal(-1, 10)); Assert.assertEquals(1, StorageTierAssoc.interpretOrdinal(-9, 10)); Assert.assertEquals(0, StorageTierAssoc.interpretOrdinal(-10, 10)); Assert.assertEquals(0, StorageTierAssoc.interpretOrdinal(-11, 10)); Assert.assertEquals(0, StorageTierAssoc.interpretOrdinal(Constants.FIRST_TIER, 10)); Assert.assertEquals(1, StorageTierAssoc.interpretOrdinal(Constants.SECOND_TIER, 10)); Assert.assertEquals(9, StorageTierAssoc.interpretOrdinal(Constants.LAST_TIER, 10)); } }