1 package com.atlassian.seraph.util;
2
3 import junit.framework.TestCase;
4
5 import java.util.Arrays;
6
7 public class TestEncryptionUtils extends TestCase
8 {
9 private static final char[] PAGE_0_ENCODED_VALUES = new char[]{ 'A', 'B', 'C', 'D', 'E', 'F', 'a', 'b', 'c', 'd', 'e', 'f' };
10 private static final char[] PAGE_1_ENCODED_VALUES = new char[]{ 'G', 'H', 'I', 'J', 'K', 'L', 'g', 'h', 'i', 'j', 'k', 'l' };
11 private static final char[] PAGE_2_ENCODED_VALUES = new char[]{ 'M', 'N', 'O', 'P', 'Q', 'R', 'm', 'n', 'o', 'p', 'q', 'r' };
12 private static final char[] PAGE_3_ENCODED_VALUES = new char[]{ 'S', 'T', 'U', 'V', 'W', 'X', 's', 't', 'u', 'v', 'w', 'x' };
13
14 public void testDecodeOffset()
15 {
16 assertEquals(0, (int) EncryptionUtils.decodeOffset('0'));
17 assertEquals(1, (int) EncryptionUtils.decodeOffset('1'));
18 assertEquals(10, (int) EncryptionUtils.decodeOffset('A'));
19 assertEquals(35, (int) EncryptionUtils.decodeOffset('Z'));
20 assertEquals(42, (int) EncryptionUtils.decodeOffset('g'));
21 assertEquals(61, (int) EncryptionUtils.decodeOffset('z'));
22 assertEquals(62, (int) EncryptionUtils.decodeOffset('<'));
23 assertEquals(63, (int) EncryptionUtils.decodeOffset('>'));
24 assertEquals(2, (int) EncryptionUtils.decodeOffset('!'));
25 assertEquals(2, (int) EncryptionUtils.decodeOffset('\u2042'));
26 assertEquals(2, (int) EncryptionUtils.decodeOffset('\0'));
27 }
28
29 public void testEncodeOffset()
30 {
31 assertEquals('0', EncryptionUtils.encodeOffset(0));
32 assertEquals('1', EncryptionUtils.encodeOffset(1));
33 assertEquals('9', EncryptionUtils.encodeOffset(9));
34 assertEquals('A', EncryptionUtils.encodeOffset(10));
35 assertEquals('Z', EncryptionUtils.encodeOffset(35));
36 assertEquals('g', EncryptionUtils.encodeOffset(42));
37 assertEquals('z', EncryptionUtils.encodeOffset(61));
38 assertEquals('<', EncryptionUtils.encodeOffset(62));
39 assertEquals('>', EncryptionUtils.encodeOffset(63));
40 assertEquals('\0', EncryptionUtils.encodeOffset(64));
41 assertEquals('\0', EncryptionUtils.encodeOffset(2042));
42 }
43
44 public void testEncodePageNumber()
45 {
46 char encoded = EncryptionUtils.encodePageNumber(0);
47 assertTrue(encoded + " should be one of " + String.valueOf(PAGE_0_ENCODED_VALUES),
48 Arrays.binarySearch(PAGE_0_ENCODED_VALUES, encoded) >= 0);
49
50 encoded = EncryptionUtils.encodePageNumber(1);
51 assertTrue(encoded + " should be one of " + String.valueOf(PAGE_1_ENCODED_VALUES),
52 Arrays.binarySearch(PAGE_1_ENCODED_VALUES, encoded) >= 0);
53
54 encoded = EncryptionUtils.encodePageNumber(2);
55 assertTrue(encoded + " should be one of " + String.valueOf(PAGE_2_ENCODED_VALUES),
56 Arrays.binarySearch(PAGE_2_ENCODED_VALUES, encoded) >= 0);
57
58 encoded = EncryptionUtils.encodePageNumber(3);
59 assertTrue(encoded + " should be one of " + String.valueOf(PAGE_3_ENCODED_VALUES),
60 Arrays.binarySearch(PAGE_3_ENCODED_VALUES, encoded) >= 0);
61 }
62
63 public void testEncodePage0()
64 {
65 String encoded = EncryptionUtils.encode(new byte[]{-128});
66 assertTrue(encoded.charAt(0) + " should be one of " + String.valueOf(PAGE_0_ENCODED_VALUES),
67 Arrays.binarySearch(PAGE_0_ENCODED_VALUES, encoded.charAt(0)) >= 0);
68 assertEquals("0", encoded.substring(1));
69
70 encoded = EncryptionUtils.encode(new byte[]{-86});
71 assertTrue(encoded.charAt(0) + " should be one of " + String.valueOf(PAGE_0_ENCODED_VALUES),
72 Arrays.binarySearch(PAGE_0_ENCODED_VALUES, encoded.charAt(0)) >= 0);
73 assertEquals("g", encoded.substring(1));
74
75 encoded = EncryptionUtils.encode(new byte[]{-65});
76 assertTrue(encoded.charAt(0) + " should be one of " + String.valueOf(PAGE_0_ENCODED_VALUES),
77 Arrays.binarySearch(PAGE_0_ENCODED_VALUES, encoded.charAt(0)) >= 0);
78 assertEquals(">", encoded.substring(1));
79 }
80
81 public void testEncodePage1()
82 {
83 String encoded = EncryptionUtils.encode(new byte[]{-64});
84 assertTrue(encoded.charAt(0) + " should be one of " + String.valueOf(PAGE_1_ENCODED_VALUES),
85 Arrays.binarySearch(PAGE_1_ENCODED_VALUES, encoded.charAt(0)) >= 0);
86 assertEquals("0", encoded.substring(1));
87
88 encoded = EncryptionUtils.encode(new byte[]{-22});
89 assertTrue(encoded.charAt(0) + " should be one of " + String.valueOf(PAGE_1_ENCODED_VALUES),
90 Arrays.binarySearch(PAGE_1_ENCODED_VALUES, encoded.charAt(0)) >= 0);
91 assertEquals("g", encoded.substring(1));
92
93 encoded = EncryptionUtils.encode(new byte[]{-1});
94 assertTrue(encoded.charAt(0) + " should be one of " + String.valueOf(PAGE_1_ENCODED_VALUES),
95 Arrays.binarySearch(PAGE_1_ENCODED_VALUES, encoded.charAt(0)) >= 0);
96 assertEquals(">", encoded.substring(1));
97 }
98
99 public void testEncodePage2()
100 {
101 String encoded = EncryptionUtils.encode(new byte[]{0});
102 assertTrue(encoded.charAt(0) + " should be one of " + String.valueOf(PAGE_2_ENCODED_VALUES),
103 Arrays.binarySearch(PAGE_2_ENCODED_VALUES, encoded.charAt(0)) >= 0);
104 assertEquals("0", encoded.substring(1));
105
106 encoded = EncryptionUtils.encode(new byte[]{10});
107 assertTrue(encoded.charAt(0) + " should be one of " + String.valueOf(PAGE_2_ENCODED_VALUES),
108 Arrays.binarySearch(PAGE_2_ENCODED_VALUES, encoded.charAt(0)) >= 0);
109 assertEquals("A", encoded.substring(1));
110
111 encoded = EncryptionUtils.encode(new byte[]{35});
112 assertTrue(encoded.charAt(0) + " should be one of " + String.valueOf(PAGE_2_ENCODED_VALUES),
113 Arrays.binarySearch(PAGE_2_ENCODED_VALUES, encoded.charAt(0)) >= 0);
114 assertEquals("Z", encoded.substring(1));
115
116 encoded = EncryptionUtils.encode(new byte[]{42});
117 assertTrue(encoded.charAt(0) + " should be one of " + String.valueOf(PAGE_2_ENCODED_VALUES),
118 Arrays.binarySearch(PAGE_2_ENCODED_VALUES, encoded.charAt(0)) >= 0);
119 assertEquals("g", encoded.substring(1));
120
121 encoded = EncryptionUtils.encode(new byte[]{63});
122 assertTrue(encoded.charAt(0) + " should be one of " + String.valueOf(PAGE_2_ENCODED_VALUES),
123 Arrays.binarySearch(PAGE_2_ENCODED_VALUES, encoded.charAt(0)) >= 0);
124 assertEquals(">", encoded.substring(1));
125 }
126
127 public void testEncodePage3()
128 {
129 String encoded = EncryptionUtils.encode(new byte[]{64});
130 assertTrue(encoded.charAt(0) + " should be one of " + String.valueOf(PAGE_3_ENCODED_VALUES),
131 Arrays.binarySearch(PAGE_3_ENCODED_VALUES, encoded.charAt(0)) >= 0);
132 assertEquals("0", encoded.substring(1));
133
134 encoded = EncryptionUtils.encode(new byte[]{74});
135 assertTrue(encoded.charAt(0) + " should be one of " + String.valueOf(PAGE_3_ENCODED_VALUES),
136 Arrays.binarySearch(PAGE_3_ENCODED_VALUES, encoded.charAt(0)) >= 0);
137 assertEquals("A", encoded.substring(1));
138
139 encoded = EncryptionUtils.encode(new byte[]{99});
140 assertTrue(encoded.charAt(0) + " should be one of " + String.valueOf(PAGE_3_ENCODED_VALUES),
141 Arrays.binarySearch(PAGE_3_ENCODED_VALUES, encoded.charAt(0)) >= 0);
142 assertEquals("Z", encoded.substring(1));
143
144 encoded = EncryptionUtils.encode(new byte[]{106});
145 assertTrue(encoded.charAt(0) + " should be one of " + String.valueOf(PAGE_3_ENCODED_VALUES),
146 Arrays.binarySearch(PAGE_3_ENCODED_VALUES, encoded.charAt(0)) >= 0);
147 assertEquals("g", encoded.substring(1));
148
149 encoded = EncryptionUtils.encode(new byte[]{127});
150 assertTrue(encoded.charAt(0) + " should be one of " + String.valueOf(PAGE_3_ENCODED_VALUES),
151 Arrays.binarySearch(PAGE_3_ENCODED_VALUES, encoded.charAt(0)) >= 0);
152 assertEquals(">", encoded.substring(1));
153 }
154
155 public void testEncodeMultipleBytes()
156 {
157 String encoded = EncryptionUtils.encode(new byte[]{1, 2, 3, 4});
158 assertEquals(8, encoded.length());
159 assertEquals("1234", encoded.substring(4));
160
161 encoded = EncryptionUtils.encode(new byte[]{42, 6, 63, 96, 9});
162 assertEquals(10, encoded.length());
163 assertEquals("g6>W9", encoded.substring(5));
164 }
165
166 public void testDecode()
167 {
168 byte[] decoded = EncryptionUtils.decode("AGinSuZpVmW0>7W<qr#2");
169 assertEquals(10, decoded.length);
170 assertEquals(-96, decoded[0]);
171 assertEquals(-64, decoded[1]);
172 assertEquals(-1, decoded[2]);
173 assertEquals(7, decoded[3]);
174 assertEquals(96, decoded[4]);
175 assertEquals(126, decoded[5]);
176 assertEquals(0, decoded[6]);
177 assertEquals(53, decoded[7]);
178 assertEquals(66, decoded[8]);
179 assertEquals(2, decoded[9]);
180 }
181 }