package com.rackspacecloud.blueflood.io; import com.google.common.collect.HashBasedTable; import com.google.common.collect.Table; import com.rackspacecloud.blueflood.io.astyanax.AMetadataIO; import com.rackspacecloud.blueflood.io.datastax.DMetadataIO; import com.rackspacecloud.blueflood.types.Locator; import com.rackspacecloud.blueflood.types.MetricMetadata; import com.rackspacecloud.blueflood.types.RollupType; import org.junit.Test; import java.io.IOException; import java.util.Arrays; import java.util.HashSet; import java.util.Map; import java.util.Set; import static org.junit.Assert.*; /** * Verify the MetadataIO implementations and ensure Astyanax & Datastax are compatible. */ public class MetadataIOIntegrationTest extends IntegrationTestBase { private static final String CACHE_KEY = MetricMetadata.ROLLUP_TYPE.name().toLowerCase(); private AMetadataIO astyanaxMetadataIO = new AMetadataIO(); private DMetadataIO dMetadataIO = new DMetadataIO(); @Test public void writeSingleAstyanaxReadSingleDatastax() throws IOException { Locator name = Locator.createLocatorFromPathComponents( getRandomTenantId(), "single.put.astyanax.single.read.datastax" ); astyanaxMetadataIO.put( name, CACHE_KEY, RollupType.COUNTER.toString() ); Map<String, String> result = dMetadataIO.getAllValues( name ); assertEquals( 1, result.size() ); Map.Entry<String, String> entry = result.entrySet().iterator().next(); assertEquals( CACHE_KEY, entry.getKey() ); assertEquals( RollupType.COUNTER.toString(), entry.getValue() ); } @Test public void writeSingleDatastaxReadSingleAstyanax() throws IOException { Locator name = Locator.createLocatorFromPathComponents( getRandomTenantId(), "single.put.datastax.single.read.astyanax" ); dMetadataIO.put( name, CACHE_KEY, RollupType.TIMER.toString() ); Map<String, String> result = astyanaxMetadataIO.getAllValues( name ); assertEquals( 1, result.size() ); Map.Entry<String, String> entry = result.entrySet().iterator().next(); assertEquals( CACHE_KEY, entry.getKey() ); assertEquals( RollupType.TIMER.toString(), entry.getValue() ); } @Test public void writeAllAstyanaxReadAllDatastax() throws IOException { Locator l0 = Locator.createLocatorFromPathComponents( getRandomTenantId(), "all.put.astyanax.all.read.datastax.l0" ); Locator l1 = Locator.createLocatorFromPathComponents( getRandomTenantId(), "all.put.astyanax.all.read.datastax.l1" ); Table<Locator, String, String> meta = HashBasedTable.create(); meta.put( l0, CACHE_KEY, RollupType.GAUGE.toString() ); meta.put( l1, CACHE_KEY, RollupType.SET.toString() ); astyanaxMetadataIO.putAll( meta ); Set<Locator> query = new HashSet<Locator>( Arrays.asList( l0, l1 ) ); Table<Locator, String, String> result = dMetadataIO.getAllValues( query ); assertEquals( 2, result.size() ); Map<String, String> row = result.row( l0 ); assertEquals( 1, row.size() ); Map.Entry<String, String> entry = row.entrySet().iterator().next(); assertEquals( CACHE_KEY, entry.getKey() ); assertEquals( RollupType.GAUGE.toString(), entry.getValue() ); Map<String, String> row2 = result.row( l1 ); assertEquals( 1, row2.size() ); Map.Entry<String, String> entry2 = row2.entrySet().iterator().next(); assertEquals( CACHE_KEY, entry2.getKey() ); assertEquals( RollupType.SET.toString(), entry2.getValue() ); } @Test public void writeAllDatastaxReadAllAstyanax() throws IOException { Locator l0 = Locator.createLocatorFromPathComponents( getRandomTenantId(), "all.put.datastax.all.read.astyanax.l0" ); Locator l1 = Locator.createLocatorFromPathComponents( getRandomTenantId(), "all.put.datastax.all.read.astyanax.l1" ); Table<Locator, String, String> meta = HashBasedTable.create(); meta.put( l0, CACHE_KEY, RollupType.GAUGE.toString() ); meta.put( l1, CACHE_KEY, RollupType.SET.toString() ); dMetadataIO.putAll( meta ); Set<Locator> query = new HashSet<Locator>( Arrays.asList( l0, l1 ) ); Table<Locator, String, String> result = astyanaxMetadataIO.getAllValues( query ); assertEquals( 2, result.size() ); Map<String, String> row = result.row( l0 ); assertEquals( 1, row.size() ); Map.Entry<String, String> entry = row.entrySet().iterator().next(); assertEquals( CACHE_KEY, entry.getKey() ); assertEquals( RollupType.GAUGE.toString(), entry.getValue() ); Map<String, String> row2 = result.row( l1 ); assertEquals( 1, row2.size() ); Map.Entry<String, String> entry2 = row2.entrySet().iterator().next(); assertEquals( CACHE_KEY, entry2.getKey() ); assertEquals( RollupType.SET.toString(), entry2.getValue() ); } }