package mixconfig.tools.dataretention.smartcard.commands;

import java.util.Arrays;

import mixconfig.tools.dataretention.smartcard.ApduConstants;
import mixconfig.tools.dataretention.smartcard.Helpers;

import org.junit.*;

public class DataTransmissionCommandTest extends AbstractCommandTest {

	private byte[] expectedHeader = { ApduConstants.CLA_ANON, ApduConstants.INSTRUCTION_DATA_TRANSMISSION, 0x00, 0x00, DataTransmissionCommand.bytesPerDataTransmisionCommand };
	private byte[] data;

	@Before
	public void initData() {
		data = new byte[255 * 3];
		for (int i = 0; i < data.length; i++) {
			data[i] = (byte) (i % 128);
		}
	}

	@Test
	public void apduIsBuiltCorrectly() {
		byte[] expected;
		int index = 0;

		while (index < data.length) {
			this.command = new DataTransmissionCommand(data, index);
			if (data.length - index < DataTransmissionCommand.bytesPerDataTransmisionCommand) {
				expectedHeader[4] = (byte) (data.length - index);
			}
			expected = Helpers.concatenate(expectedHeader, Arrays.copyOfRange(data, index, index + command.arguments.length));
			checkAPDU(expected);
			index += DataTransmissionCommand.bytesPerDataTransmisionCommand;
		}
	}
}