blob: 3e379023f71bb5c7bf18d671a503ce0fa10ea560 [file] [log] [blame]
/*********************************************************************
* Copyright (c) 2020 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.ote.simple.test.script;
import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.DatagramChannel;
import java.util.logging.Level;
import org.eclipse.osee.framework.logging.OseeLog;
import org.eclipse.osee.ote.core.TestException;
import org.eclipse.osee.ote.core.annotations.Order;
import org.eclipse.osee.ote.core.environment.EnvironmentTask;
import org.eclipse.osee.ote.core.environment.jini.ITestEnvironmentCommandCallback;
import org.eclipse.osee.ote.message.MessageSystemTestEnvironment;
import org.eclipse.ote.io.mux.MuxHeader;
import org.eclipse.ote.simple.io.SimpleDataType;
import org.eclipse.ote.simple.io.SimpleMuxReceiver;
import org.eclipse.ote.simple.io.message.HELLO_WORLD;
import org.eclipse.ote.simple.io.message.SIMPLE_MUX_R_MSG;
import org.eclipse.ote.simple.io.message.lookup.SimpleMuxReceiverHeader;
import org.eclipse.ote.simple.test.environment.SimpleOteApi;
import org.junit.Test;
/**
* @author Andy Jury
*/
public class SimpleTestScript extends SimpleTestScriptType {
HELLO_WORLD writer;
public SimpleTestScript(MessageSystemTestEnvironment testEnvironment, ITestEnvironmentCommandCallback callback) {
super(testEnvironment, callback);
this.writer = getMessageWriter(HELLO_WORLD.class);
setupTestScript((SimpleOteApi) testEnvironment.getOteApi());
}
protected void setupTestScript(SimpleOteApi oteApi) {
// Intentionally empty block
}
@Test
@Order(1)
public void testCase1(SimpleOteApi oteApi) {
prompt("In TestCase1");
promptPause("In TestCase1");
promptPassFail("Pass/Fail?");
}
@Test
@Order(2)
public void testCase2(SimpleOteApi oteApi) {
// This test case will fail when running in an environment with Mux
// unless you uncomment the following line to force the message mem type
writer.setMemSource(SimpleDataType.SIMPLE);
prompt("In the LocalSetupTestCase");
writer.PRINT_ME.setNoLog("TEST1");
testWait(1000);
writer.PRINT_ME.setNoLog("TEST2");
testWait(1000);
writer.PRINT_ME.setNoLog("TEST3");
testWait(1000);
writer.PRINT_ME.setNoLog("TEST4");
writer.ONLY_IN_SIMPLE.setNoLog(64);
writer.send();
testWait(1000);
writer.unschedule();
}
@Test
@Order(3)
public void testCaseSend(SimpleOteApi oteApi) {
try {
MuxChannelSender sender = new MuxChannelSender();
environment.addTask(sender);
testWait(10000);
sender.disable();
} catch (IOException ex) {
logTestPoint(false, "Error starting packet sender", "N/A", ex.getMessage());
}
}
private class MuxChannelSender extends EnvironmentTask {
private SIMPLE_MUX_R_MSG sendMsg = new SIMPLE_MUX_R_MSG();
private SimpleMuxReceiverHeader header = new SimpleMuxReceiverHeader();
private int counter = 1;
private DatagramChannel datagramChannel;
private ByteBuffer buffer;
private InetSocketAddress socket;
public MuxChannelSender() throws IOException {
super(1.0);
datagramChannel = DatagramChannel.open();
int payloadSize = sendMsg.getDefaultByteSize() + MuxHeader.MUX_HEADER_BYTE_SIZE;
buffer = ByteBuffer.allocate(payloadSize + header.getDefaultByteSize());
InetAddress receiveAddress = InetAddress.getLocalHost();
socket = new InetSocketAddress(receiveAddress, SimpleMuxReceiver.SIMPLE_MUX_RECEIVE_PORT);
}
@Override
public void runOneCycle() throws TestException {
sendMsg.MUX_SPECIFIC_ELEMENT.setNoLog((double) counter++);
header.fillInBytes(sendMsg);
byte[] headerData = header.getData();
byte[] muxData = sendMsg.getData();
buffer.clear();
buffer.put(headerData);
buffer.put(muxData);
buffer.flip();
try {
System.out.printf("%d: Sending to %s\n", System.currentTimeMillis(), socket.toString());
datagramChannel.send(buffer, socket);
} catch (IOException ex) {
OseeLog.log(MuxChannelSender.class, Level.WARNING, "Error sending test packet to " + socket.toString(), ex);
}
}
}
}