blob: 02dc5a590cc39e14e067af6ea1598f4a6dba2370 [file] [log] [blame]
/*********************************************************************
* Copyright (c) 2023 Boeing
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Boeing - initial API and implementation
**********************************************************************/
package org.eclipse.osee.ote.message.data;
import java.math.BigInteger;
import java.nio.ByteBuffer;
import org.junit.Assert;
import org.junit.Test;
public class MemoryResourceTest {
@Test
public void testcopyDataByteBuffer() {
byte[] data = new byte[32];
ByteBuffer buffer = ByteBuffer.allocate(32);
for (int i = 0; i < 16; i++) {
buffer.put((byte) 0xDD);
}
for (int i = 0; i < 16; i++) {
buffer.put((byte) 0xFF);
}
buffer.position(16);
MemoryResource mem = new MemoryResource(data, 0, 64);
mem.copyData(0, buffer, buffer.remaining());
byte[] answer = new byte[32];
for (int i = 0; i < 16; i++) {
answer[i] = (byte) 0xFF;
}
Assert.assertArrayEquals(answer, mem.getData());
buffer.position(0);
mem.copyData(0, buffer, buffer.remaining());
for (int i = 0; i < 16; i++) {
answer[i] = (byte) 0xDD;
}
for (int i = 16; i < 32; i++) {
answer[i] = (byte) 0xFF;
}
Assert.assertArrayEquals(answer, mem.getData());
}
@Test
public void testSignedInt8() {
byte[] data = new byte[256];
for (int i = 0; i < data.length; i++) {
data[i] = (byte) i;
}
MemoryResource mem = new MemoryResource(data, 0, 256);
int val = mem.getSignedInt(8, 0, 7);
Assert.assertEquals(8, val);
val = mem.getSignedInt(127, 0, 7);
Assert.assertEquals(127, val);
val = mem.getSignedInt(128, 0, 7);
Assert.assertEquals(-128, val);
val = mem.getSignedInt(255, 0, 7);
Assert.assertEquals(-1, val);
mem.setInt(255, 0, 0, 7);
val = mem.getSignedInt(0, 0, 7);
Assert.assertEquals(-1, val);
mem.setInt(-1, 1, 0, 7);
val = mem.getSignedInt(1, 0, 7);
Assert.assertEquals(-1, val);
mem.setInt(-1, 4, 2, 5);
val = mem.getSignedInt(4, 2, 5);
Assert.assertEquals(-1, val);
val = mem.getInt(4, 2, 5);
Assert.assertEquals(15, val);
}
@Test
public void testSignedInt() {
byte[] data = new byte[256];
for (int i = 0; i < data.length; i++) {
data[i] = (byte) i;
}
MemoryResource mem = new MemoryResource(data, 0, 256);
mem.setInt(14, 0, 0, 31);
int val = mem.getSignedInt(0, 0, 31);
Assert.assertEquals(14, val);
mem.setInt(-450, 0, 0, 31);
val = mem.getSignedInt(0, 0, 31);
Assert.assertEquals(-450, val);
}
@Test
public void testBigInt() {
byte[] data = new byte[256];
for (int i = 0; i < data.length; i++) {
data[i] = (byte) i;
}
MemoryResource mem = new MemoryResource(data, 0, 256);
mem.setLong(-1, 0, 0, 63);
BigInteger val = mem.getUnsigned64(0, 0, 63);
String hex = val.toString(16).toUpperCase();
Assert.assertEquals("FFFFFFFFFFFFFFFF", hex);
mem.setLong(-100, 0, 0, 63);
val = mem.getUnsigned64(0, 0, 63);
hex = val.toString(16).toUpperCase();
String expected = "FFFFFFFFFFFFFF9C";
Assert.assertEquals(expected, hex);
}
@Test
public void testMask() {
StringBuilder sb = new StringBuilder();
MemoryResource mem = new MemoryResource(new byte[24], 0, 24);
String expected;
// Begin int tests
mem.setInt(0x22334455, 13, 0, 31);
for (int i = 0; i < mem.getLength(); i++) {
sb.append(String.format("%02x ", mem.getMask()[i]));
}
expected = "00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff 00 00 00 00 00 00 00 ";
Assert.assertEquals(expected, sb.toString());
sb.setLength(0);
mem.setInt(0xff334455, 8, 0, 31);
for (int i = 0; i < mem.getLength(); i++) {
sb.append(String.format("%02x ", mem.getMask()[i]));
}
expected = "00 00 00 00 00 00 00 00 ff ff ff ff 00 ff ff ff ff 00 00 00 00 00 00 00 ";
Assert.assertEquals(expected, sb.toString());
sb.setLength(0);
// Begin long tests
mem = new MemoryResource(new byte[24], 0, 24);
mem.setLong(0x02L, 21, 7, 56);
for (int i = 0; i < mem.getLength(); i++) {
sb.append(String.format("%02x ", mem.getMask()[i]));
}
expected = "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 ff 80 ";
Assert.assertEquals(expected, sb.toString());
sb.setLength(0);
mem.setLong(0x02L, 21, 0, 56);
for (int i = 0; i < mem.getLength(); i++) {
sb.append(String.format("%02x ", mem.getMask()[i]));
}
expected = "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff 80 ";
Assert.assertEquals(expected, sb.toString());
sb.setLength(0);
mem.setLong(0x12L, 16, 32, 63);
for (int i = 0; i < mem.getLength(); i++) {
sb.append(String.format("%02x ", mem.getMask()[i]));
}
expected = "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ";
Assert.assertEquals(expected, sb.toString());
sb.setLength(0);
mem.setLong(0x12L, 16, 24, 63);
for (int i = 0; i < mem.getLength(); i++) {
sb.append(String.format("%02x ", mem.getMask()[i]));
}
expected = "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ";
Assert.assertEquals(expected, sb.toString());
sb.setLength(0);
mem.setLong(0xffL, 16, 23, 43);
for (int i = 0; i < mem.getLength(); i++) {
sb.append(String.format("%02x ", mem.getMask()[i]));
}
expected = "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 ff ff ff ff ff ";
Assert.assertEquals(expected, sb.toString());
sb.setLength(0);
mem.setLong(0xffdd555522L, 16, 8, 63);
for (int i = 0; i < mem.getLength(); i++) {
sb.append(String.format("%02x ", mem.getMask()[i]));
}
expected = "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ";
Assert.assertEquals(expected, sb.toString());
sb.setLength(0);
mem.setLong(0x00L, 16, 7, 41);
for (int i = 0; i < mem.getLength(); i++) {
sb.append(String.format("%02x ", mem.getMask()[i]));
}
expected = "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 ff ff ff ff ff ff ff ";
Assert.assertEquals(expected, sb.toString());
sb.setLength(0);
mem.setLong(0x1234567890abcdefL, 16, 2, 63);
for (int i = 0; i < mem.getLength(); i++) {
sb.append(String.format("%02x ", mem.getMask()[i]));
}
expected = "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3f ff ff ff ff ff ff ff ";
Assert.assertEquals(expected, sb.toString());
sb.setLength(0);
mem.setLong(0xf234567890abcdefL, 16, 0, 63);
for (int i = 0; i < mem.getLength(); i++) {
sb.append(String.format("%02x ", mem.getMask()[i]));
}
expected = "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ";
Assert.assertEquals(expected, sb.toString());
sb.setLength(0);
//Begin ASCII tests
mem = new MemoryResource(new byte[24], 0, 24);
mem.setASCIIString("Testing", 4, 0, 55);
for (int i = 0; i < mem.getLength(); i++) {
sb.append(String.format("%02x ", mem.getMask()[i]));
}
expected = "00 00 00 00 ff ff ff ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00 ";
Assert.assertEquals(expected, sb.toString());
sb.setLength(0);
mem.setASCIIString("Boeing", 16);
for (int i = 0; i < mem.getLength(); i++) {
sb.append(String.format("%02x ", mem.getMask()[i]));
}
expected = "00 00 00 00 ff ff ff ff ff ff ff 00 00 00 00 00 ff ff ff ff ff ff 00 00 ";
Assert.assertEquals(expected, sb.toString());
sb.setLength(0);
// test for element less than a byte
mem = new MemoryResource(new byte[24], 0, 1);
mem.setInt(2, 0, 2, 3);
for (int i = 0; i < mem.getLength(); i++) {
sb.append(String.format("%02x ", mem.getMask()[i]));
}
expected = "30 ";
Assert.assertEquals(expected, sb.toString());
sb.setLength(0);
mem.setInt(2, 0, 4, 6);
for (int i = 0; i < mem.getLength(); i++) {
sb.append(String.format("%02x ", mem.getMask()[i]));
}
expected = "3e ";
Assert.assertEquals(expected, sb.toString());
sb.setLength(0);
// Test element partially across multiple bytes
mem = new MemoryResource(new byte[24], 0, 4);
mem.setInt(2, 0, 7, 16);
for (int i = 0; i < mem.getLength(); i++) {
sb.append(String.format("%02x ", mem.getMask()[i]));
}
expected = "01 ff 80 00 ";
Assert.assertEquals(expected, sb.toString());
sb.setLength(0);
}
@Test
public void testElementMaskZeroize() {
StringBuilder sb = new StringBuilder();
MemoryResource mem = new MemoryResource(new byte[24], 0, 24);
String expected;
// setup
mem.setInt(0x22334455, 13, 0, 31);
for (int i = 0; i < mem.getLength(); i++) {
sb.append(String.format("%02x ", mem.getMask()[i]));
}
expected = "00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff 00 00 00 00 00 00 00 ";
Assert.assertEquals(expected, sb.toString());
sb.setLength(0);
mem.zeroizeMask(13, 2, 2);
for (int i = 0; i < mem.getLength(); i++) {
sb.append(String.format("%02x ", mem.getMask()[i]));
}
expected = "00 00 00 00 00 00 00 00 00 00 00 00 00 df ff ff ff 00 00 00 00 00 00 00 ";
Assert.assertEquals(expected, sb.toString());
sb.setLength(0);
mem.zeroizeMask(13, 7, 16);
for (int i = 0; i < mem.getLength(); i++) {
sb.append(String.format("%02x ", mem.getMask()[i]));
}
expected = "00 00 00 00 00 00 00 00 00 00 00 00 00 de 00 7f ff 00 00 00 00 00 00 00 ";
Assert.assertEquals(expected, sb.toString());
sb.setLength(0);
// add more mask for next part
mem.setInt(0x22334455, 13, 0, 31);
for (int i = 0; i < mem.getLength(); i++) {
sb.append(String.format("%02x ", mem.getMask()[i]));
}
expected = "00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff 00 00 00 00 00 00 00 ";
Assert.assertEquals(expected, sb.toString());
sb.setLength(0);
mem.zeroizeMask(14, 0, 2);
for (int i = 0; i < mem.getLength(); i++) {
sb.append(String.format("%02x ", mem.getMask()[i]));
}
expected = "00 00 00 00 00 00 00 00 00 00 00 00 00 ff 1f ff ff 00 00 00 00 00 00 00 ";
Assert.assertEquals(expected, sb.toString());
sb.setLength(0);
mem.zeroizeMask(15, 0, 15);
for (int i = 0; i < mem.getLength(); i++) {
sb.append(String.format("%02x ", mem.getMask()[i]));
}
expected = "00 00 00 00 00 00 00 00 00 00 00 00 00 ff 1f 00 00 00 00 00 00 00 00 00 ";
Assert.assertEquals(expected, sb.toString());
sb.setLength(0);
}
@Test
public void testWholeMaskZeroize() {
StringBuilder sb = new StringBuilder();
MemoryResource mem = new MemoryResource(new byte[10], 0, 10);
String expected;
// setup
mem.setASCIIString("01", 0);
mem.setInt(0x0, 4, 3, 12);
mem.setInt(0x0, 7, 5, 5);
for (int i = 0; i < mem.getLength(); i++) {
sb.append(String.format("%02x ", mem.getMask()[i]));
}
expected = "ff ff 00 00 1f f8 00 04 00 00 ";
Assert.assertEquals(expected, sb.toString());
sb.setLength(0);
mem.zeroizeMask();
for (int i = 0; i < mem.getLength(); i++) {
sb.append(String.format("%02x ", mem.getMask()[i]));
}
expected = "00 00 00 00 00 00 00 00 00 00 ";
Assert.assertEquals(expected, sb.toString());
sb.setLength(0);
}
}