package org.openstack.atlas.service.domain.usage;
import org.junit.Assert;
import org.junit.Test;
import org.junit.experimental.runners.Enclosed;
import org.junit.runner.RunWith;
@RunWith(Enclosed.class)
public class BitTagsTest {
private static final int sslOnly = BitTag.SSL.tagValue();
private static final int sslMixed = BitTag.SSL_MIXED_MODE.tagValue();
private static final int servicenetOnly = BitTag.SERVICENET_LB.tagValue();
private static final int sslAndServicenet = sslOnly + servicenetOnly;
public static class WhenPassingInBitTagsThroughConstructor {
@Test
public void shouldHaveCorrectTagsSetWhenOnlySslTagIsSet() {
BitTags bitTags = new BitTags(sslOnly);
Assert.assertTrue(bitTags.isTagOn(BitTag.SSL));
Assert.assertFalse(bitTags.isTagOn(BitTag.SERVICENET_LB));
}
@Test
public void shouldHaveCorrectTagsSetWhenOnlyServiceNetTagIsSet() {
BitTags bitTags = new BitTags(servicenetOnly);
Assert.assertFalse(bitTags.isTagOn(BitTag.SSL));
Assert.assertTrue(bitTags.isTagOn(BitTag.SERVICENET_LB));
}
@Test
public void shouldHaveCorrectTagsSetWhenSslAndServiceNetTagsAreSet() {
BitTags bitTags = new BitTags(sslAndServicenet);
Assert.assertTrue(bitTags.isTagOn(BitTag.SSL));
Assert.assertTrue(bitTags.isTagOn(BitTag.SERVICENET_LB));
}
}
public static class WhenPassingUsingEmptyConstructor {
@Test
public void shouldHaveCorrectTagsSetWhenOnlySslTagIsSet() {
BitTags bitTags = new BitTags();
bitTags.flipTagOn(BitTag.SSL);
Assert.assertTrue(bitTags.isTagOn(BitTag.SSL));
Assert.assertFalse(bitTags.isTagOn(BitTag.SERVICENET_LB));
}
@Test
public void shouldHaveCorrectTagsSetWhenOnlyServicenetTagIsSet() {
BitTags bitTags = new BitTags();
bitTags.flipTagOn(BitTag.SERVICENET_LB);
Assert.assertFalse(bitTags.isTagOn(BitTag.SSL));
Assert.assertTrue(bitTags.isTagOn(BitTag.SERVICENET_LB));
}
@Test
public void shouldHaveCorrectTagsSetWhenSslAndServiceNetTagsAreSet() {
BitTags bitTags = new BitTags();
bitTags.flipTagOn(BitTag.SSL);
bitTags.flipTagOn(BitTag.SERVICENET_LB);
Assert.assertTrue(bitTags.isTagOn(BitTag.SSL));
Assert.assertTrue(bitTags.isTagOn(BitTag.SERVICENET_LB));
}
@Test
public void shouldHaveCorrectTagsWhenFlippingTagsOnAndOff() {
BitTags bitTags = new BitTags();
bitTags.flipTagOn(BitTag.SSL);
Assert.assertTrue(bitTags.isTagOn(BitTag.SSL));
Assert.assertFalse(bitTags.isTagOn(BitTag.SERVICENET_LB));
bitTags.flipTagOn(BitTag.SERVICENET_LB);
Assert.assertTrue(bitTags.isTagOn(BitTag.SSL));
Assert.assertTrue(bitTags.isTagOn(BitTag.SERVICENET_LB));
bitTags.flipTagOff(BitTag.SSL);
Assert.assertFalse(bitTags.isTagOn(BitTag.SSL));
Assert.assertTrue(bitTags.isTagOn(BitTag.SERVICENET_LB));
bitTags.flipTagOff(BitTag.SERVICENET_LB);
Assert.assertFalse(bitTags.isTagOn(BitTag.SSL));
Assert.assertFalse(bitTags.isTagOn(BitTag.SERVICENET_LB));
}
}
public static class WhenFlippingTagsMultipleTimes {
@Test
public void shouldHaveNoSslWhenDisablingSslOnlyMultipleTimes() {
BitTags bitTags = new BitTags(sslOnly);
Assert.assertTrue(bitTags.isTagOn(BitTag.SSL));
bitTags.flipTagOff(BitTag.SSL);
Assert.assertFalse(bitTags.isTagOn(BitTag.SSL));
bitTags.flipTagOff(BitTag.SSL);
Assert.assertFalse(bitTags.isTagOn(BitTag.SSL));
bitTags.flipTagOff(BitTag.SSL);
Assert.assertFalse(bitTags.isTagOn(BitTag.SSL));
}
@Test
public void shouldHaveNoSslWhenDisablingSslMixedMultipleTimes() {
BitTags bitTags = new BitTags(sslMixed);
Assert.assertTrue(bitTags.isTagOn(BitTag.SSL_MIXED_MODE));
bitTags.flipTagOff(BitTag.SSL_MIXED_MODE);
Assert.assertFalse(bitTags.isTagOn(BitTag.SSL_MIXED_MODE));
bitTags.flipTagOff(BitTag.SSL_MIXED_MODE);
Assert.assertFalse(bitTags.isTagOn(BitTag.SSL_MIXED_MODE));
bitTags.flipTagOff(BitTag.SSL_MIXED_MODE);
Assert.assertFalse(bitTags.isTagOn(BitTag.SSL_MIXED_MODE));
}
}
}