/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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 org.apache.activemq.transport.tcp; import java.net.Socket; import java.util.HashMap; import java.util.Map; import junit.framework.TestCase; public class QualityOfServiceUtilsTest extends TestCase { /** * Keeps track of the value that the System has set for the ECN bits, which * should not be overridden when Differentiated Services is set, but may be * overridden when Type of Service is set. */ private int ECN; @Override protected void setUp() throws Exception { Socket socket = new Socket(); ECN = socket.getTrafficClass() & Integer.parseInt("00000011", 2); socket.close(); } @Override protected void tearDown() throws Exception { super.tearDown(); } public void testValidDiffServIntegerValues() { int[] values = {0, 1, 32, 62, 63}; for (int val : values) { testValidDiffServIntegerValue(val); } } public void testInvalidDiffServIntegerValues() { int[] values = {-2, -1, 64, 65}; for (int val : values) { testInvalidDiffServIntegerValue(val); } } public void testValidDiffServNames() { Map<String, Integer> namesToExpected = new HashMap<String, Integer>(); namesToExpected.put("CS0", Integer.valueOf("000000", 2)); namesToExpected.put("CS1", Integer.valueOf("001000", 2)); namesToExpected.put("CS2", Integer.valueOf("010000", 2)); namesToExpected.put("CS3", Integer.valueOf("011000", 2)); namesToExpected.put("CS4", Integer.valueOf("100000", 2)); namesToExpected.put("CS5", Integer.valueOf("101000", 2)); namesToExpected.put("CS6", Integer.valueOf("110000", 2)); namesToExpected.put("CS7", Integer.valueOf("111000", 2)); namesToExpected.put("EF", Integer.valueOf("101110", 2)); namesToExpected.put("AF11", Integer.valueOf("001010", 2)); namesToExpected.put("AF12", Integer.valueOf("001100", 2)); namesToExpected.put("AF13", Integer.valueOf("001110", 2)); namesToExpected.put("AF21", Integer.valueOf("010010", 2)); namesToExpected.put("AF22", Integer.valueOf("010100", 2)); namesToExpected.put("AF23", Integer.valueOf("010110", 2)); namesToExpected.put("AF31", Integer.valueOf("011010", 2)); namesToExpected.put("AF32", Integer.valueOf("011100", 2)); namesToExpected.put("AF33", Integer.valueOf("011110", 2)); namesToExpected.put("AF41", Integer.valueOf("100010", 2)); namesToExpected.put("AF42", Integer.valueOf("100100", 2)); namesToExpected.put("AF43", Integer.valueOf("100110", 2)); for (String name : namesToExpected.keySet()) { testValidDiffServName(name, namesToExpected.get(name)); } } public void testInvalidDiffServNames() { String[] names = {"hello_world", "", "abcd"}; for (String name : names) { testInvalidDiffServName(name); } } private void testValidDiffServName(String name, int expected) { int dscp = -1; try { dscp = QualityOfServiceUtils.getDSCP(name); } catch (IllegalArgumentException e) { fail("IllegalArgumentException thrown for valid Differentiated " + " Services name: " + name); } // Make sure it adjusted for any system ECN values. assertEquals("Incorrect Differentiated Services Code Point " + dscp + " returned for name " + name + ".", ECN | (expected << 2), dscp); } private void testInvalidDiffServName(String name) { try { QualityOfServiceUtils.getDSCP(name); fail("No IllegalArgumentException thrown for invalid Differentiated" + " Services value: " + name + "."); } catch (IllegalArgumentException e) { } } private void testValidDiffServIntegerValue(int val) { try { int dscp = QualityOfServiceUtils.getDSCP(Integer.toString(val)); // Make sure it adjusted for any system ECN values. assertEquals("Incorrect Differentiated Services Code Point " + "returned for value " + val + ".", ECN | (val << 2), dscp); } catch (IllegalArgumentException e) { fail("IllegalArgumentException thrown for valid Differentiated " + "Services value " + val); } } private void testInvalidDiffServIntegerValue(int val) { try { QualityOfServiceUtils.getDSCP(Integer.toString(val)); fail("No IllegalArgumentException thrown for invalid " + "Differentiated Services value " + val + "."); } catch (IllegalArgumentException expected) { } } public void testValidTypeOfServiceValues() { int[] values = {0, 1, 32, 100, 255}; for (int val : values) { testValidTypeOfServiceValue(val); } } public void testInvalidTypeOfServiceValues() { int[] values = {-2, -1, 256, 257}; for (int val : values) { testInvalidTypeOfServiceValue(val); } } private void testValidTypeOfServiceValue(int val) { try { int typeOfService = QualityOfServiceUtils.getToS(val); assertEquals("Incorrect Type of Services value returned for " + val + ".", val, typeOfService); } catch (IllegalArgumentException e) { fail("IllegalArgumentException thrown for valid Type of Service " + "value " + val + "."); } } private void testInvalidTypeOfServiceValue(int val) { try { QualityOfServiceUtils.getToS(val); fail("No IllegalArgumentException thrown for invalid " + "Type of Service value " + val + "."); } catch (IllegalArgumentException expected) { } } }