/**
* Copyright 2007-2015, Kaazing Corporation. All rights reserved.
*
* Licensed 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.kaazing.k3po.driver.internal.behavior;
import static java.nio.charset.StandardCharsets.UTF_8;
import static org.junit.Assert.assertEquals;
import java.io.ByteArrayInputStream;
import org.junit.Test;
import org.kaazing.k3po.lang.internal.RegionInfo;
import org.kaazing.k3po.lang.internal.ast.AstRegion;
import org.kaazing.k3po.lang.internal.ast.AstScriptNode;
import org.kaazing.k3po.lang.internal.ast.AstStreamNode;
import org.kaazing.k3po.lang.internal.parser.ScriptParser;
import org.kaazing.k3po.lang.internal.parser.ScriptParserImpl;
public class ScriptProgressTest {
@Test
public void observedScriptEqualsScriptOnSuccess() throws Exception {
// @formatter:off
String script =
"connect tcp://localhost:8080\n" +
"connected\n" +
"close\n" +
"closed\n";
// @formatter:on
ScriptParser parser = new ScriptParserImpl();
AstScriptNode scriptAST = parser.parse(new ByteArrayInputStream(script.getBytes(UTF_8)));
RegionInfo scriptInfo = scriptAST.getRegionInfo();
ScriptProgress progress = new ScriptProgress(scriptInfo, script);
String observedScript = progress.getObservedScript();
assertEquals(script, observedScript);
}
@Test
public void connectFailWriteWithWhiteSpaceOk() throws Exception {
// @formatter:off
String script =
"connect tcp://localhost:8080\n" +
"connected\n" +
"read \"M\"\n" +
"close\n" +
"closed\n";
// @formatter:on
ScriptParser parser = new ScriptParserImpl();
AstScriptNode scriptAST = parser.parse(new ByteArrayInputStream(script.getBytes(UTF_8)));
AstStreamNode connectAST = scriptAST.getStreams().get(0);
AstRegion readAST = connectAST.getStreamables().get(1);
RegionInfo scriptInfo = scriptAST.getRegionInfo();
ScriptProgress progress = new ScriptProgress(scriptInfo, script);
progress.addScriptFailure(readAST.getRegionInfo(), "closed");
String observedScript = progress.getObservedScript();
// @formatter:off
String expectedScript =
"connect tcp://localhost:8080\n" +
"connected\n" +
"closed\n";
// @formatter:on
assertEquals(expectedScript, observedScript);
}
@Test
public void testWithTabsSuccess() throws Exception {
// Test more than start,end,observed at column 0
// @formatter:off
String script =
"\tconnect tcp://localhost:8080\n" +
"connected\n" +
"close\n" +
"\t\tclosed\n";
// @formatter:on
ScriptParser parser = new ScriptParserImpl();
AstScriptNode scriptAST = parser.parse(new ByteArrayInputStream(script.getBytes(UTF_8)));
RegionInfo scriptInfo = scriptAST.getRegionInfo();
ScriptProgress progress = new ScriptProgress(scriptInfo, script);
String observedScript = progress.getObservedScript();
assertEquals(script, observedScript);
}
@Test
public void testEOFWithNoNewLine() throws Exception {
// Test no ending new line
// @formatter:off
String script =
"connect tcp://localhost:8080\n" +
"connected\n" +
"close\n" +
"closed";
// @formatter:on
ScriptParser parser = new ScriptParserImpl();
AstScriptNode scriptAST = parser.parse(new ByteArrayInputStream(script.getBytes(UTF_8)));
RegionInfo scriptInfo = scriptAST.getRegionInfo();
ScriptProgress progress = new ScriptProgress(scriptInfo, script);
String observedScript = progress.getObservedScript();
assertEquals(script, observedScript);
}
@Test
public void trailingWhiteSpaceOk() throws Exception {
// Test no ending new line
// @formatter:off
String script =
"connect tcp://localhost:8080 \n" +
"connected\t\n" +
"close\n" +
"closed\t \n";
// @formatter:on
ScriptParser parser = new ScriptParserImpl();
AstScriptNode scriptAST = parser.parse(new ByteArrayInputStream(script.getBytes(UTF_8)));
RegionInfo scriptInfo = scriptAST.getRegionInfo();
ScriptProgress progress = new ScriptProgress(scriptInfo, script);
String observedScript = progress.getObservedScript();
assertEquals(script, observedScript);
}
@Test
public void testFailOk() throws Exception {
// @formatter:off
String script =
"connect tcp://localhost:8080\n" +
"connected\n" +
"close\n" +
"closed\n";
// @formatter:on
ScriptParser parser = new ScriptParserImpl();
AstScriptNode scriptAST = parser.parse(new ByteArrayInputStream(script.getBytes(UTF_8)));
AstStreamNode connectAST = scriptAST.getStreams().get(0);
AstRegion closedAST = connectAST.getStreamables().get(2);
RegionInfo scriptInfo = scriptAST.getRegionInfo();
ScriptProgress progress = new ScriptProgress(scriptInfo, script);
progress.addScriptFailure(closedAST.getRegionInfo(), "OPEN");
String observedScript = progress.getObservedScript();
String expectedScript = "connect tcp://localhost:8080\n" + "connected\n" + "close\n" + "OPEN\n";
assertEquals(expectedScript, observedScript);
}
@Test
public void testFailWithTabOk() throws Exception {
// @formatter:off
String script =
"connect tcp://localhost:8080\n" +
"connected\n" +
"\tclose\t\n" +
"closed\n";
// @formatter:on
ScriptParser parser = new ScriptParserImpl();
AstScriptNode scriptAST = parser.parse(new ByteArrayInputStream(script.getBytes(UTF_8)));
AstStreamNode connectAST = scriptAST.getStreams().get(0);
AstRegion closedAST = connectAST.getStreamables().get(2);
RegionInfo scriptInfo = scriptAST.getRegionInfo();
ScriptProgress progress = new ScriptProgress(scriptInfo, script);
progress.addScriptFailure(closedAST.getRegionInfo(), "OPEN");
String observedScript = progress.getObservedScript();
String expectedScript = "connect tcp://localhost:8080\n" + "connected\n" + "\tclose\t\n" + "OPEN\n";
assertEquals(expectedScript, observedScript);
}
@Test
public void resultScriptEqualsOriginalScriptWithCommentsSuccess() throws Exception {
// @formatter:off
String script =
"#Start #\n" +
"connect tcp://localhost:8080\n" +
"connected #foo\n" +
"#comment\n" +
"close\n" +
"#comment\n" +
"closed\n" +
"#End\n";
// @formatter:on
ScriptParser parser = new ScriptParserImpl();
AstScriptNode scriptAST = parser.parse(new ByteArrayInputStream(script.getBytes(UTF_8)));
RegionInfo scriptInfo = scriptAST.getRegionInfo();
ScriptProgress progress = new ScriptProgress(scriptInfo, script);
String observedScript = progress.getObservedScript();
assertEquals(script, observedScript);
}
@Test
public void failCaseWithComments() throws Exception {
// @formatter:off
String script =
"#Start #\n" +
"connect tcp://localhost:8080\n" +
"connected #foo\n" +
"#comment\n" +
"close\n" +
"#comment\n" +
"closed\n" +
"#End\n";
// @formatter:on
ScriptParser parser = new ScriptParserImpl();
AstScriptNode scriptAST = parser.parse(new ByteArrayInputStream(script.getBytes(UTF_8)));
AstStreamNode connectAST = scriptAST.getStreams().get(0);
AstRegion closedAST = connectAST.getStreamables().get(2);
RegionInfo scriptInfo = scriptAST.getRegionInfo();
ScriptProgress progress = new ScriptProgress(scriptInfo, script);
progress.addScriptFailure(closedAST.getRegionInfo(), "OPEN");
String observedScript = progress.getObservedScript();
String expectedScript =
"#Start #\n" + "connect tcp://localhost:8080\n" + "connected #foo\n" + "#comment\n" + "close\n" + "#comment\n"
+ "OPEN\n" + "#End\n";
assertEquals(expectedScript, observedScript);
}
@Test
public void moreThanOneStream() throws Exception {
// @formatter:off
String script =
"connect tcp://localhost:8080\n" +
"connected\n" +
"close\n" +
"closed\n" +
"connect tcp://localhost:8081\n" +
"connected\n" +
"close\n" +
"closed\n";
// @formatter:on
ScriptParser parser = new ScriptParserImpl();
AstScriptNode scriptAST = parser.parse(new ByteArrayInputStream(script.getBytes(UTF_8)));
RegionInfo scriptInfo = scriptAST.getRegionInfo();
ScriptProgress progress = new ScriptProgress(scriptInfo, script);
String observedScript = progress.getObservedScript();
assertEquals(script, observedScript);
}
@Test
public void moreThanOneStreamComments() throws Exception {
// @formatter:off
String script =
"#Comment 1\n" +
"\tconnect tcp://localhost:8080 #comment 2\n" +
"connected\n" +
"\t#comment 3\n" +
"\tclose\n" +
"#comment 8\n" +
"\tclosed\n" +
"\t#comment 4\n" +
"\tconnect tcp://localhost:8081\n" +
"\tconnected\n" +
"#comment 7\n" +
"\tclose\n" +
"#comment 6\n" +
"\tclosed\n" +
"\t#comment 5\n";
// @formatter:on
ScriptParser parser = new ScriptParserImpl();
AstScriptNode scriptAST = parser.parse(new ByteArrayInputStream(script.getBytes(UTF_8)));
RegionInfo scriptInfo = scriptAST.getRegionInfo();
ScriptProgress progress = new ScriptProgress(scriptInfo, script);
String observedScript = progress.getObservedScript();
assertEquals(script, observedScript);
}
@Test
public void moreThanOneStreamCommentsFirstFail() throws Exception {
// @formatter:off
String script =
"#Comment 1\n" +
"\tconnect tcp://localhost:8080 #comment 2\n" +
"connected\n" +
"\t#comment 3\n" +
"\tclose\n" +
"#comment 8\n" +
"\tclosed\n" +
"\t#comment 4\n" +
"\tconnect tcp://localhost:8081\n" +
"\tconnected\n" +
"#comment 7\n" +
"\tclose\n" +
"#comment 6\n" +
"\tclosed\n" +
"\t#comment 5\n";
// @formatter:on
ScriptParser parser = new ScriptParserImpl();
AstScriptNode scriptAST = parser.parse(new ByteArrayInputStream(script.getBytes(UTF_8)));
AstStreamNode connectAST = scriptAST.getStreams().get(0);
AstRegion closeAST = connectAST.getStreamables().get(1);
RegionInfo scriptInfo = scriptAST.getRegionInfo();
ScriptProgress progress = new ScriptProgress(scriptInfo, script);
progress.addScriptFailure(closeAST.getRegionInfo(), "CLOSED");
String observedScript = progress.getObservedScript();
String expectedScript =
"#Comment 1\n" + "\tconnect tcp://localhost:8080 #comment 2\n" + "connected\n" + "\t#comment 3\n" + "\tCLOSED\n"
+ "\t#comment 4\n" + "\tconnect tcp://localhost:8081\n" + "\tconnected\n" + "#comment 7\n" + "\tclose\n"
+ "#comment 6\n" + "\tclosed\n" + "\t#comment 5\n";
assertEquals(expectedScript, observedScript);
}
@Test
public void moreThanOneStreamCommentsBothFail() throws Exception {
// @formatter:off
String script =
"#Comment 1\n" +
"\tconnect tcp://localhost:8080 #comment 2\n" +
"connected\n" +
"\t#comment 3\n" +
"\tclose\n" +
"#comment 8\n" +
"\tclosed\n" +
"\t#comment 4\n" +
"\tconnect tcp://localhost:8081\n" +
"\tconnected\n" +
"#comment 7\n" +
"\tclose\n" +
"#comment 6\n" +
"\tclosed\n" +
"\t#comment 5\n";
// @formatter:on
ScriptParser parser = new ScriptParserImpl();
AstScriptNode scriptAST = parser.parse(new ByteArrayInputStream(script.getBytes(UTF_8)));
AstStreamNode connectOneAST = scriptAST.getStreams().get(0);
AstRegion closeOneAST = connectOneAST.getStreamables().get(1);
AstStreamNode connectTwoAST = scriptAST.getStreams().get(1);
AstRegion closeTwoAST = connectTwoAST.getStreamables().get(1);
RegionInfo scriptInfo = scriptAST.getRegionInfo();
ScriptProgress progress = new ScriptProgress(scriptInfo, script);
progress.addScriptFailure(closeOneAST.getRegionInfo(), "CLOSED");
progress.addScriptFailure(closeTwoAST.getRegionInfo(), "CLOSED");
String observedScript = progress.getObservedScript();
String expectedScript =
"#Comment 1\n" + "\tconnect tcp://localhost:8080 #comment 2\n" + "connected\n" + "\t#comment 3\n" + "\tCLOSED\n"
+ "\t#comment 4\n" + "\tconnect tcp://localhost:8081\n" + "\tconnected\n" + "#comment 7\n" + "\tCLOSED\n"
+ "\t#comment 5\n";
assertEquals(expectedScript, observedScript);
}
@Test
public void moreThanOneStreamCommentsSecondFail() throws Exception {
// @formatter:off
String script =
"#Comment 1\n" +
"\tconnect tcp://localhost:8080 #comment 2\n" +
"connected\n" +
"\t#comment 3\n" +
"\tclose\n" +
"#comment 8\n" +
"\tclosed\n" +
"\t#comment 4\n" +
"\tconnect tcp://localhost:8081\n" +
"\tconnected\n" +
"#comment 7\n" +
"\tclose\n" +
"#comment 6\n" +
"\tclosed\n" +
"\t#comment 5\n";
// @formatter:on
ScriptParser parser = new ScriptParserImpl();
AstScriptNode scriptAST = parser.parse(new ByteArrayInputStream(script.getBytes(UTF_8)));
AstStreamNode connectAST = scriptAST.getStreams().get(1);
AstRegion closeAST = connectAST.getStreamables().get(1);
RegionInfo scriptInfo = scriptAST.getRegionInfo();
ScriptProgress progress = new ScriptProgress(scriptInfo, script);
progress.addScriptFailure(closeAST.getRegionInfo(), "CLOSED");
String observedScript = progress.getObservedScript();
String expectedScript =
"#Comment 1\n" + "\tconnect tcp://localhost:8080 #comment 2\n" + "connected\n" + "\t#comment 3\n" + "\tclose\n"
+ "#comment 8\n" + "\tclosed\n" + "\t#comment 4\n" + "\tconnect tcp://localhost:8081\n" + "\tconnected\n"
+ "#comment 7\n" + "\tCLOSED\n" + "\t#comment 5\n";
assertEquals(expectedScript, observedScript);
}
@Test
public void acceptSuccess() throws Exception {
// @formatter:off
String script =
"accept tcp://localhost:8080\n" +
"accepted\n" +
"connected\n" +
"close\n" +
"closed\n";
// @formatter:on
ScriptParser parser = new ScriptParserImpl();
AstScriptNode scriptAST = parser.parse(new ByteArrayInputStream(script.getBytes(UTF_8)));
RegionInfo scriptInfo = scriptAST.getRegionInfo();
ScriptProgress progress = new ScriptProgress(scriptInfo, script);
String observedScript = progress.getObservedScript();
assertEquals(script, observedScript);
}
@Test
public void acceptCommentsSuccess() throws Exception {
// @formatter:off
String script =
"# Accept script\n" +
"\taccept tcp://localhost:8080 #commentagain\n" +
"\t#comment #1\n" +
"accepted\n" +
"#comment #2\n" +
"connected\n" +
"#comment #3\n" +
"close\n" +
"#comment #4\n" +
"closed\n" +
"#comment #5\n";
// @formatter:on
ScriptParser parser = new ScriptParserImpl();
AstScriptNode scriptAST = parser.parse(new ByteArrayInputStream(script.getBytes(UTF_8)));
RegionInfo scriptInfo = scriptAST.getRegionInfo();
ScriptProgress progress = new ScriptProgress(scriptInfo, script);
String observedScript = progress.getObservedScript();
assertEquals(script, observedScript);
}
@Test
public void acceptFailOk() throws Exception {
// @formatter:off
String script =
"# Accept script\n" +
"\taccept tcp://localhost:8080 #commentagain\n" +
"\t#comment #1\n" +
"accepted\n" +
"#comment #2\n" +
"connected\n" +
"#comment #3\n" +
"close\n" +
"#comment #4\n" +
"closed\n" +
"#comment #5\n";
// @formatter:on
ScriptParser parser = new ScriptParserImpl();
AstScriptNode scriptAST = parser.parse(new ByteArrayInputStream(script.getBytes(UTF_8)));
AstStreamNode acceptedAST = scriptAST.getStreams().get(1);
AstRegion closeAST = acceptedAST.getStreamables().get(1);
RegionInfo scriptInfo = scriptAST.getRegionInfo();
ScriptProgress progress = new ScriptProgress(scriptInfo, script);
progress.addScriptFailure(closeAST.getRegionInfo(), "CLOSED");
String observedScript = progress.getObservedScript();
String expectedScript =
"# Accept script\n" + "\taccept tcp://localhost:8080 #commentagain\n" + "\t#comment #1\n" + "accepted\n"
+ "#comment #2\n" + "connected\n" + "#comment #3\n" + "CLOSED\n" + "#comment #5\n";
assertEquals(expectedScript, observedScript);
}
@Test
public void acceptTwoSuccess() throws Exception {
// @formatter:off
String script =
"# Accept script\n" +
"\taccept tcp://localhost:8080 #commentagain\n" +
"\t#comment #1\n" +
"accepted\n" +
"#comment #2\n" +
"connected\n" +
"#comment #3\n" +
"close\n" +
"#comment #4\n" +
"closed\n" +
"#comment #5\n" +
"accepted\n" +
"#comment #2\n" +
"connected\n" +
"#comment #3\n" +
"close\n" +
"#comment #4\n" +
"closed\n" +
"#comment #5\n";
// @formatter:on
ScriptParser parser = new ScriptParserImpl();
AstScriptNode scriptAST = parser.parse(new ByteArrayInputStream(script.getBytes(UTF_8)));
RegionInfo scriptInfo = scriptAST.getRegionInfo();
ScriptProgress progress = new ScriptProgress(scriptInfo, script);
String observedScript = progress.getObservedScript();
assertEquals(script, observedScript);
}
@Test
public void acceptFirstFailOk() throws Exception {
// @formatter:off
String script =
"# Accept script\n" +
"\taccept tcp://localhost:8080 #commentagain\n" +
"\t#comment #1\n" +
"accepted\n" +
"#comment #2\n" +
"connected\n" +
"#comment #3\n" +
"close\n" +
"#comment #4\n" +
"closed\n" +
"#comment #5\n" +
"accepted\n" +
"#comment #2\n" +
"connected\n" +
"#comment #3\n" +
"close\n" +
"#comment #4\n" +
"closed\n" +
"#comment #5\n";
// @formatter:on
ScriptParser parser = new ScriptParserImpl();
AstScriptNode scriptAST = parser.parse(new ByteArrayInputStream(script.getBytes(UTF_8)));
AstStreamNode acceptedAST = scriptAST.getStreams().get(1);
AstRegion closeAST = acceptedAST.getStreamables().get(1);
RegionInfo scriptInfo = scriptAST.getRegionInfo();
ScriptProgress progress = new ScriptProgress(scriptInfo, script);
progress.addScriptFailure(closeAST.getRegionInfo(), "CLOSED");
String observedScript = progress.getObservedScript();
String expectedScript =
"# Accept script\n" + "\taccept tcp://localhost:8080 #commentagain\n" + "\t#comment #1\n" + "accepted\n"
+ "#comment #2\n" + "connected\n" + "#comment #3\n" + "CLOSED\n" + "#comment #5\n" + "accepted\n"
+ "#comment #2\n" + "connected\n" + "#comment #3\n" + "close\n" + "#comment #4\n" + "closed\n"
+ "#comment #5\n";
assertEquals(expectedScript, observedScript);
}
@Test
public void acceptSecondFailOk() throws Exception {
// @formatter:off
String script =
"# Accept script\n" +
"\taccept tcp://localhost:8080 #commentagain\n" +
"\t#comment #1\n" +
"accepted\n" +
"#comment #2\n" +
"connected\n" +
"#comment #3\n" +
"close\n" +
"#comment #4\n" +
"closed\n" +
"#comment #5\n" +
"accepted\n" +
"#comment #2\n" +
"connected\n" +
"#comment #3\n" +
"close\n" +
"#comment #4\n" +
"closed\n" +
"#comment #5\n";
// @formatter:on
ScriptParser parser = new ScriptParserImpl();
AstScriptNode scriptAST = parser.parse(new ByteArrayInputStream(script.getBytes(UTF_8)));
AstStreamNode acceptedAST = scriptAST.getStreams().get(2);
AstRegion closeAST = acceptedAST.getStreamables().get(1);
RegionInfo scriptInfo = scriptAST.getRegionInfo();
ScriptProgress progress = new ScriptProgress(scriptInfo, script);
progress.addScriptFailure(closeAST.getRegionInfo(), "CLOSED");
String observedScript = progress.getObservedScript();
String expectedScript =
"# Accept script\n" + "\taccept tcp://localhost:8080 #commentagain\n" + "\t#comment #1\n" + "accepted\n"
+ "#comment #2\n" + "connected\n" + "#comment #3\n" + "close\n" + "#comment #4\n" + "closed\n"
+ "#comment #5\n" + "accepted\n" + "#comment #2\n" + "connected\n" + "#comment #3\n" + "CLOSED\n"
+ "#comment #5\n";
assertEquals(expectedScript, observedScript);
}
@Test
public void acceptAllFailOk() throws Exception {
// @formatter:off
String script =
"# Accept script\n" +
"\taccept tcp://localhost:8080 #commentagain\n" +
"\t#comment #1\n" +
"accepted\n" +
"#comment #2\n" +
"connected\n" +
"#comment #3\n" +
"close\n" +
"#comment #4\n" +
"closed\n" +
"#comment #5\n" +
"accepted\n" +
"#comment #2\n" +
"connected\n" +
"#comment #3\n" +
"close\n" +
"#comment #4\n" +
"closed\n" +
"#comment #5\n";
// @formatter:on
ScriptParser parser = new ScriptParserImpl();
AstScriptNode scriptAST = parser.parse(new ByteArrayInputStream(script.getBytes(UTF_8)));
AstStreamNode acceptedOneAST = scriptAST.getStreams().get(1);
AstRegion closeOneAST = acceptedOneAST.getStreamables().get(1);
AstStreamNode acceptedTwoAST = scriptAST.getStreams().get(2);
AstRegion closeTwoAST = acceptedTwoAST.getStreamables().get(1);
RegionInfo scriptInfo = scriptAST.getRegionInfo();
ScriptProgress progress = new ScriptProgress(scriptInfo, script);
progress.addScriptFailure(closeOneAST.getRegionInfo(), "CLOSED");
progress.addScriptFailure(closeTwoAST.getRegionInfo(), "CLOSED");
String observedScript = progress.getObservedScript();
String expectedScript =
"# Accept script\n" + "\taccept tcp://localhost:8080 #commentagain\n" + "\t#comment #1\n" + "accepted\n"
+ "#comment #2\n" + "connected\n" + "#comment #3\n" + "CLOSED\n" + "#comment #5\n" + "accepted\n"
+ "#comment #2\n" + "connected\n" + "#comment #3\n" + "CLOSED\n" + "#comment #5\n";
assertEquals(expectedScript, observedScript);
}
@Test
public void acceptAndConnectSuccess() throws Exception {
// @formatter:off
String script =
"# Accept script\n" +
"\taccept tcp://localhost:8080 #commentagain\n" +
"\t#comment #1\n" +
"accepted\n" +
"#comment #2\n" +
"connected\n" +
"#comment #3\n" +
"close\n" +
"#comment #4\n" +
"closed\n" +
"#comment #5\n" +
"accepted\n" +
"#comment #2\n" +
"connected\n" +
"#comment #3\n" +
"close\n" +
"#comment #4\n" +
"closed\n" +
"#comment #5\n" +
"connect foobar:///foo\n" +
"connected\n" +
"close\n" +
"closed\n";
// @formatter:on
ScriptParser parser = new ScriptParserImpl();
AstScriptNode scriptAST = parser.parse(new ByteArrayInputStream(script.getBytes(UTF_8)));
RegionInfo scriptInfo = scriptAST.getRegionInfo();
ScriptProgress progress = new ScriptProgress(scriptInfo, script);
String observedScript = progress.getObservedScript();
assertEquals(script, observedScript);
}
@Test
public void middleStreamFailsOk() throws Exception {
// @formatter:off
String script =
"connect tcp://localhost:8081\n" +
"connected\n" +
"close\n" +
"closed\n" +
"connect tcp://localhost:8082\n" +
"connected\n" +
"close\n" +
"closed\n" +
"connect tcp://localhost:8083\n" +
"connected\n" +
"close\n" +
"closed\n";
// @formatter:on
ScriptParser parser = new ScriptParserImpl();
AstScriptNode scriptAST = parser.parse(new ByteArrayInputStream(script.getBytes(UTF_8)));
AstStreamNode connectAST = scriptAST.getStreams().get(1);
RegionInfo scriptInfo = scriptAST.getRegionInfo();
ScriptProgress progress = new ScriptProgress(scriptInfo, script);
progress.addScriptFailure(connectAST.getRegionInfo(), "connect refused");
String observedScript = progress.getObservedScript();
String expectedScript =
"connect tcp://localhost:8081\n" + "connected\n" + "close\n" + "closed\n" + "connect refused\n"
+ "connect tcp://localhost:8083\n" + "connected\n" + "close\n" + "closed\n";
assertEquals(expectedScript, observedScript);
}
@Test
public void firstStreamFailsOk() throws Exception {
// @formatter:off
String script =
"connect tcp://localhost:8081\n" +
"connected\n" +
"close\n" +
"closed\n" +
"connect tcp://localhost:8082\n" +
"connected\n" +
"close\n" +
"closed\n" +
"connect tcp://localhost:8083\n" +
"connected\n" +
"close\n" +
"closed\n";
// @formatter:on
ScriptParser parser = new ScriptParserImpl();
AstScriptNode scriptAST = parser.parse(new ByteArrayInputStream(script.getBytes(UTF_8)));
AstStreamNode connectAST = scriptAST.getStreams().get(0);
RegionInfo scriptInfo = scriptAST.getRegionInfo();
ScriptProgress progress = new ScriptProgress(scriptInfo, script);
progress.addScriptFailure(connectAST.getRegionInfo(), "connect refused");
String observedScript = progress.getObservedScript();
String expectedScript =
"connect refused\n" + "connect tcp://localhost:8082\n" + "connected\n" + "close\n" + "closed\n"
+ "connect tcp://localhost:8083\n" + "connected\n" + "close\n" + "closed\n";
assertEquals(expectedScript, observedScript);
}
@Test
public void lastStreamFailsOk() throws Exception {
// @formatter:off
String script =
"connect tcp://localhost:8081\n" +
"connected\n" +
"close\n" +
"closed\n" +
"connect tcp://localhost:8082\n" +
"connected\n" +
"close\n" +
"closed\n" +
"connect tcp://localhost:8083\n" +
"connected\n" +
"close\n" +
"closed\n";
// @formatter:on
ScriptParser parser = new ScriptParserImpl();
AstScriptNode scriptAST = parser.parse(new ByteArrayInputStream(script.getBytes(UTF_8)));
AstStreamNode connectAST = scriptAST.getStreams().get(2);
RegionInfo scriptInfo = scriptAST.getRegionInfo();
ScriptProgress progress = new ScriptProgress(scriptInfo, script);
progress.addScriptFailure(connectAST.getRegionInfo(), "connect refused");
String observedScript = progress.getObservedScript();
String expectedScript =
"connect tcp://localhost:8081\n" + "connected\n" + "close\n" + "closed\n" + "connect tcp://localhost:8082\n"
+ "connected\n" + "close\n" + "closed\n" + "connect refused\n";
assertEquals(expectedScript, observedScript);
}
@Test
public void middleStreamFailsWithCommentsOk() throws Exception {
// @formatter:off
String script =
"#Start Stream 1\n" +
"connect tcp://localhost:8081\n" +
"connected\n" +
"close\n" +
"closed\n" +
"#Stream 2\n" +
"connect tcp://localhost:8082\n" +
"connected\n" +
"#Mid stream 2\n" +
"close\n" +
"closed\n" +
"#Stream 3\n" +
"connect tcp://localhost:8083\n" +
"connected\n" +
"close\n" +
"closed\n" +
"#DONE\n";
// @formatter:on
ScriptParser parser = new ScriptParserImpl();
AstScriptNode scriptAST = parser.parse(new ByteArrayInputStream(script.getBytes(UTF_8)));
AstStreamNode connectAST = scriptAST.getStreams().get(1);
RegionInfo scriptInfo = scriptAST.getRegionInfo();
ScriptProgress progress = new ScriptProgress(scriptInfo, script);
progress.addScriptFailure(connectAST.getRegionInfo(), "connect refused");
String observedScript = progress.getObservedScript();
// The engine can't tell that #Stream 3 should be there.
String expectedScript =
"#Start Stream 1\n" + "connect tcp://localhost:8081\n" + "connected\n" + "close\n" + "closed\n" + "#Stream 2\n"
+ "connect refused\n" + "#Stream 3\n" + "connect tcp://localhost:8083\n" + "connected\n" + "close\n"
+ "closed\n" + "#DONE\n";
assertEquals(expectedScript, observedScript);
}
@Test
public void skipStreamThenAcceptOk() throws Exception {
// @formatter:off
String script =
"connect tcp://localhost:8080\n" +
"connected\n" +
"close\n" +
"closed\n" +
"connect tcp://localhost:8081\n" +
"connected\n" +
"close\n" +
"closed\n" +
"accept tcp://localhost:8082\n" +
"accepted\n" +
"connected\n" +
"close\n" +
"closed\n";
// @formatter:on
ScriptParser parser = new ScriptParserImpl();
AstScriptNode scriptAST = parser.parse(new ByteArrayInputStream(script.getBytes(UTF_8)));
AstStreamNode connectAST = scriptAST.getStreams().get(1);
RegionInfo scriptInfo = scriptAST.getRegionInfo();
ScriptProgress progress = new ScriptProgress(scriptInfo, script);
progress.addScriptFailure(connectAST.getRegionInfo(), "connect refused");
String observedScript = progress.getObservedScript();
// @formatter:off
String expectedScript =
"connect tcp://localhost:8080\n" +
"connected\n" +
"close\n" +
"closed\n" +
"connect refused\n" +
"accept tcp://localhost:8082\n" +
"accepted\n" +
"connected\n" +
"close\n" +
"closed\n";
// @formatter:on
assertEquals(expectedScript, observedScript);
}
@Test
public void skipStreamThenAcceptWithCommentsOk() throws Exception {
// @formatter:off
String script =
"#Stream #1\n" +
"connect tcp://localhost:8080\n" +
"connected\n" +
"#Middle Comment\n" +
"close\n" +
"closed\n" +
"#Stream #2\n" +
"connect tcp://localhost:8081\n" +
"connected\n" +
"\n" +
"#Middle Comment\n" +
"close\n" +
"closed\n" +
"#Stream #3\n" +
"accept tcp://localhost:8082\n" +
"#Stream #4\n" +
"\n" +
"accepted\n" +
"connected\n" +
"#Middle Comment\n" +
"close\n" +
"closed\n";
// @formatter:on
ScriptParser parser = new ScriptParserImpl();
AstScriptNode scriptAST = parser.parse(new ByteArrayInputStream(script.getBytes(UTF_8)));
AstStreamNode connectAST = scriptAST.getStreams().get(1);
RegionInfo scriptInfo = scriptAST.getRegionInfo();
ScriptProgress progress = new ScriptProgress(scriptInfo, script);
progress.addScriptFailure(connectAST.getRegionInfo(), "connect refused");
String observedScript = progress.getObservedScript();
String expectedScript =
"#Stream #1\n" + "connect tcp://localhost:8080\n" + "connected\n" + "#Middle Comment\n" + "close\n" + "closed\n"
+ "#Stream #2\n" + "connect refused\n" + "#Stream #3\n" + "accept tcp://localhost:8082\n"
+ "#Stream #4\n" + "\n" + "accepted\n" + "connected\n" + "#Middle Comment\n" + "close\n" + "closed\n";
assertEquals(expectedScript, observedScript);
}
@Test
public void acceptNoStreamsOk() throws Exception {
// @formatter:off
String script =
"accept tcp://localhost:8080\n" +
"accepted\n" +
"connected\n" +
"close\n" +
"closed\n";
// @formatter:on
ScriptParser parser = new ScriptParserImpl();
AstScriptNode scriptAST = parser.parse(new ByteArrayInputStream(script.getBytes(UTF_8)));
AstStreamNode acceptedAST = scriptAST.getStreams().get(1);
RegionInfo scriptInfo = scriptAST.getRegionInfo();
ScriptProgress progress = new ScriptProgress(scriptInfo, script);
progress.addScriptFailure(acceptedAST.getRegionInfo());
String observedScript = progress.getObservedScript();
// @formatter:off
String expectedScript =
"accept tcp://localhost:8080\n" +
"\n";
// @formatter:on
assertEquals(expectedScript, observedScript);
}
@Test
public void twoAcceptNoStreamsOk() throws Exception {
// @formatter:off
String script =
"accept tcp://localhost:8080\n" +
"accepted\n" +
"connected\n" +
"close\n" +
"closed\n" +
"accept tcp://localhost:8080\n" +
"accepted\n" +
"connected\n" +
"close\n" +
"closed\n";
// @formatter:on
ScriptParser parser = new ScriptParserImpl();
AstScriptNode scriptAST = parser.parse(new ByteArrayInputStream(script.getBytes(UTF_8)));
AstStreamNode acceptedOneAST = scriptAST.getStreams().get(1);
AstStreamNode acceptedTwoAST = scriptAST.getStreams().get(3);
RegionInfo scriptInfo = scriptAST.getRegionInfo();
ScriptProgress progress = new ScriptProgress(scriptInfo, script);
progress.addScriptFailure(acceptedOneAST.getRegionInfo());
progress.addScriptFailure(acceptedTwoAST.getRegionInfo());
String observedScript = progress.getObservedScript();
String expectedScript = "accept tcp://localhost:8080\n" + "\n" + "accept tcp://localhost:8080\n" + "\n";
assertEquals(expectedScript, observedScript);
}
@Test
public void connectAndAcceptNoStreamsOk() throws Exception {
// @formatter:off
String script =
"accept tcp://localhost:8080\n" +
"accepted\n" +
"connected\n" +
"close\n" +
"closed\n" +
"connect tcp://localhost:8081\n" +
"connected\n" +
"close\n" +
"closed\n";
// @formatter:on
ScriptParser parser = new ScriptParserImpl();
AstScriptNode scriptAST = parser.parse(new ByteArrayInputStream(script.getBytes(UTF_8)));
AstStreamNode acceptedAST = scriptAST.getStreams().get(1);
RegionInfo scriptInfo = scriptAST.getRegionInfo();
ScriptProgress progress = new ScriptProgress(scriptInfo, script);
progress.addScriptFailure(acceptedAST.getRegionInfo());
String observedScript = progress.getObservedScript();
String expectedScript =
"accept tcp://localhost:8080\n" + "\n" + "connect tcp://localhost:8081\n" + "connected\n" + "close\n"
+ "closed\n";
assertEquals(expectedScript, observedScript);
}
@Test
public void connectNoOneHomeOk() throws Exception {
// @formatter:off
String script =
"connect tcp://localhost:8080\n" +
"connected\n" +
"close\n" +
"closed\n";
// @formatter:on
ScriptParser parser = new ScriptParserImpl();
AstScriptNode scriptAST = parser.parse(new ByteArrayInputStream(script.getBytes(UTF_8)));
AstStreamNode connectAST = scriptAST.getStreams().get(0);
AstRegion connectedAST = connectAST.getStreamables().get(0);
RegionInfo scriptInfo = scriptAST.getRegionInfo();
ScriptProgress progress = new ScriptProgress(scriptInfo, script);
progress.addScriptFailure(connectedAST.getRegionInfo(), "OPEN");
String observedScript = progress.getObservedScript();
// @formatter:off
String expectedScript =
"connect tcp://localhost:8080\n" +
"OPEN\n";
// @formatter:on
assertEquals(expectedScript, observedScript);
}
@Test
public void emptyScriptOK() throws Exception {
// @formatter:off
String script =
"";
// @formatter:on
ScriptParser parser = new ScriptParserImpl();
AstScriptNode scriptAST = parser.parse(new ByteArrayInputStream(script.getBytes(UTF_8)));
RegionInfo scriptInfo = scriptAST.getRegionInfo();
ScriptProgress progress = new ScriptProgress(scriptInfo, script);
String observedScript = progress.getObservedScript();
assertEquals(script, observedScript);
}
@Test
public void scriptWithAllFailedOk() throws Exception {
// @formatter:off
String script =
"connect tcp://localhost:8080\n" +
"connected\n" +
"close\n" +
"closed\n";
// @formatter:on
ScriptParser parser = new ScriptParserImpl();
AstScriptNode scriptAST = parser.parse(new ByteArrayInputStream(script.getBytes(UTF_8)));
AstStreamNode connectAST = scriptAST.getStreams().get(0);
RegionInfo scriptInfo = scriptAST.getRegionInfo();
ScriptProgress progress = new ScriptProgress(scriptInfo, script);
progress.addScriptFailure(connectAST.getRegionInfo());
String observedScript = progress.getObservedScript();
String expectedScript = "\n";
assertEquals(expectedScript, observedScript);
}
@Test
public void canEchoWrongOK() throws Exception {
// @formatter:off
String script =
"accept tcp://localhost:8080\n" +
"accepted\n" +
"connected\n" +
"read \"ello\"\n" +
"closed\n" +
"#Connect channel\n" +
"connect tcp://localhost:8080\n" +
"connected\n" +
"write \"Hello\"\n" +
"close\n" +
"closed\n";
// @formatter:on
ScriptParser parser = new ScriptParserImpl();
AstScriptNode scriptAST = parser.parse(new ByteArrayInputStream(script.getBytes(UTF_8)));
AstStreamNode acceptedAST = scriptAST.getStreams().get(1);
AstRegion readAST = acceptedAST.getStreamables().get(1);
RegionInfo scriptInfo = scriptAST.getRegionInfo();
ScriptProgress progress = new ScriptProgress(scriptInfo, script);
progress.addScriptFailure(readAST.getRegionInfo(), "OPEN");
String observedScript = progress.getObservedScript();
// @formatter:off
String expectedScript =
"accept tcp://localhost:8080\n" +
"accepted\n" +
"connected\n" +
"OPEN\n" +
"#Connect channel\n" +
"connect tcp://localhost:8080\n" +
"connected\n" +
"write \"Hello\"\n" +
"close\n" +
"closed\n";
// @formatter:on
assertEquals(expectedScript, observedScript);
}
@Test
public void canSkipFirstAcceptStreamAndSecondStream() throws Exception {
// @formatter:off
String script =
"accept tcp://localhost:8080\n" +
"accepted\n" +
"connected\n" +
"close\n" +
"closed\n" +
"connect tcp://localhost:8080\n" +
"connected\n" +
"closed\n";
// @formatter:on
ScriptParser parser = new ScriptParserImpl();
AstScriptNode scriptAST = parser.parse(new ByteArrayInputStream(script.getBytes(UTF_8)));
AstStreamNode connectOneAST = scriptAST.getStreams().get(1);
AstRegion connectedOneAST = connectOneAST.getStreamables().get(0);
AstStreamNode connectTwoAST = scriptAST.getStreams().get(2);
AstRegion connectedTwoAST = connectTwoAST.getStreamables().get(0);
RegionInfo scriptInfo = scriptAST.getRegionInfo();
ScriptProgress progress = new ScriptProgress(scriptInfo, script);
progress.addScriptFailure(connectedOneAST.getRegionInfo());
progress.addScriptFailure(connectedTwoAST.getRegionInfo());
String observedScript = progress.getObservedScript();
// @formatter:off
String expectedScript =
"accept tcp://localhost:8080\n" +
"accepted\n" +
"\n" +
"connect tcp://localhost:8080\n" +
"\n";
// @formatter:on
assertEquals(expectedScript, observedScript);
}
@Test
public void canSkipFirstConnectStreamAndSecondStream() throws Exception {
// @formatter:off
String script =
"connect tcp://localhost:8080\n" +
"connected\n" +
"closed\n" +
"accept tcp://localhost:8080\n" +
"accepted\n" +
"connected\n" +
"close\n" +
"closed\n";
// @formatter:on
ScriptParser parser = new ScriptParserImpl();
AstScriptNode scriptAST = parser.parse(new ByteArrayInputStream(script.getBytes(UTF_8)));
AstStreamNode connectAST = scriptAST.getStreams().get(0);
AstRegion connectedOneAST = connectAST.getStreamables().get(0);
AstStreamNode acceptedAST = scriptAST.getStreams().get(2);
AstRegion connectedTwoAST = acceptedAST.getStreamables().get(0);
RegionInfo scriptInfo = scriptAST.getRegionInfo();
ScriptProgress progress = new ScriptProgress(scriptInfo, script);
progress.addScriptFailure(connectedOneAST.getRegionInfo());
progress.addScriptFailure(connectedTwoAST.getRegionInfo());
String observedScript = progress.getObservedScript();
// @formatter:off
String expectedScript =
"connect tcp://localhost:8080\n" +
"\n" +
"accept tcp://localhost:8080\n" +
"accepted\n" +
"\n";
// @formatter:on
assertEquals(expectedScript, observedScript);
}
@Test
public void testCacheResultOk() throws Exception {
// @formatter:off
String script =
"connect tcp://localhost:8080\n" +
"connected\n" +
"close\n" +
"closed\n";
// @formatter:on
ScriptParser parser = new ScriptParserImpl();
AstScriptNode scriptAST = parser.parse(new ByteArrayInputStream(script.getBytes(UTF_8)));
AstStreamNode connectAST = scriptAST.getStreams().get(0);
AstRegion closedAST = connectAST.getStreamables().get(2);
RegionInfo scriptInfo = scriptAST.getRegionInfo();
ScriptProgress progress = new ScriptProgress(scriptInfo, script);
progress.addScriptFailure(closedAST.getRegionInfo(), "OPEN");
String observedScript = progress.getObservedScript();
String expectedScript = "connect tcp://localhost:8080\n" + "connected\n" + "close\n" + "OPEN\n";
assertEquals(expectedScript, observedScript);
// failed scripts aren't idempotent on internal implementation
// but should return the same observed script
observedScript = progress.getObservedScript();
assertEquals(expectedScript, observedScript);
}
}