commit eb951d69e1482b44401764d80a3d4f60aa066529 Author: Tobias Eidelpes Date: Fri Dec 18 17:02:46 2020 +0100 Initial commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..b6d72b4 --- /dev/null +++ b/README.md @@ -0,0 +1,29 @@ +distributed systems lab +======================= + +Using gradle +------------ + +### Compile & Test + +Gradle is the build tool we are using. Here are some instructions: + +Compile the project using the gradle wrapper: + + ./gradlew assemble + +Compile and run the tests: + + ./gradlew build + +### Run the applications + +The gradle config config contains several tasks that start application components for you. +You can list them with + + ./gradlew tasks --all + +And search for 'Other tasks' starting with `run-`. For example, to run the monitoring server, execute: +(the `--console=plain` flag disables CLI features, like color output, that may break the console output when running a interactive application) + + ./gradlew --console=plain run-monitoring diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..e324d3d --- /dev/null +++ b/build.gradle @@ -0,0 +1,68 @@ +/* + * This file was generated by the Gradle 'init' task. + */ + +plugins { + id 'java-library' + id 'java' +} + +group = 'at.ac.tuwien.infosys.dslab' +version = '2020' + +java { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 +} + +dependencies { + implementation files('lib/commons-logging-1.2.jar') + implementation files('lib/hamcrest-core-1.3.jar') + implementation files('lib/junit-4.12.jar') + implementation files('lib/orvell-core-0.2.0.jar') +} + +// ======== run specifications + +tasks.withType(JavaCompile) { + options.encoding = 'UTF-8' +} + +def dslabRunTasks = [ + [name: 'run-monitoring', main: 'dslab.monitoring.MonitoringServer', args: 'monitoring', description: 'Run Monitoring Server'], + [name: 'run-transfer-1', main: 'dslab.transfer.TransferServer', args: 'transfer-1', description: 'Run Transfer Server #1'], + [name: 'run-transfer-2', main: 'dslab.transfer.TransferServer', args: 'transfer-2', description: 'Run Transfer Server #2'], + [name: 'run-mailbox-earth-planet', main: 'dslab.mailbox.MailboxServer', args: 'mailbox-earth-planet', description: 'Run Mailbox Server for earth.planet'], + [name: 'run-mailbox-univer-ze', main: 'dslab.mailbox.MailboxServer', args: 'mailbox-univer-ze', description: 'Run Mailbox Server for univer.ze'], + // assignment 2 + [name: 'run-ns-root', main: 'dslab.nameserver.Nameserver', args: 'ns-root', description: 'Run root nameserver'], + [name: 'run-ns-ze', main: 'dslab.nameserver.Nameserver', args: 'ns-ze', description: 'Run .ze nameserver'], + [name: 'run-ns-planet', main: 'dslab.nameserver.Nameserver', args: 'ns-planet', description: 'Run .planet nameserver'], + [name: 'run-ns-earth-planet', main: 'dslab.nameserver.Nameserver', args: 'ns-earth-planet', description: 'Run .earth.planet nameserver'], + [name: 'run-client-trillian', main: 'dslab.client.MessageClient', args: 'client-trillian', description: 'Run client for trillian'], + [name: 'run-client-arthur', main: 'dslab.client.MessageClient', args: 'client-arthur', description: 'Run client for arthur'], + [name: 'run-client-zaphod', main: 'dslab.client.MessageClient', args: 'client-zaphod', description: 'Run client for zaphod'], +] + +// dynamically create run tasks of this structure: +// +// task 'run-transfer-1'(dependsOn: 'classes', type: JavaExec) { +// main = 'dslab.transfer.TransferServer' +// args 'transfer-2' +// classpath = sourceSets.main.runtimeClasspath +// standardInput = System.in +// } + +for (t in dslabRunTasks) { + def taskName = t['name'] + + task "$taskName"(dependsOn: 'classes', type: JavaExec) { + main = t['main'] + args t['args'] + description = t['description'] + + classpath = sourceSets.main.runtimeClasspath + // https://discuss.gradle.org/t/why-doesnt-system-in-read-block-when-im-using-gradle/3308 + standardInput = System.in + } +} diff --git a/build/classes/java/main/dslab/ComponentFactory.class b/build/classes/java/main/dslab/ComponentFactory.class new file mode 100644 index 0000000..6a33c44 Binary files /dev/null and b/build/classes/java/main/dslab/ComponentFactory.class differ diff --git a/build/classes/java/main/dslab/client/IMessageClient.class b/build/classes/java/main/dslab/client/IMessageClient.class new file mode 100644 index 0000000..801e491 Binary files /dev/null and b/build/classes/java/main/dslab/client/IMessageClient.class differ diff --git a/build/classes/java/main/dslab/client/MessageClient.class b/build/classes/java/main/dslab/client/MessageClient.class new file mode 100644 index 0000000..e11d76a Binary files /dev/null and b/build/classes/java/main/dslab/client/MessageClient.class differ diff --git a/build/classes/java/main/dslab/mailbox/IMailboxServer.class b/build/classes/java/main/dslab/mailbox/IMailboxServer.class new file mode 100644 index 0000000..350b6cf Binary files /dev/null and b/build/classes/java/main/dslab/mailbox/IMailboxServer.class differ diff --git a/build/classes/java/main/dslab/mailbox/MailboxServer.class b/build/classes/java/main/dslab/mailbox/MailboxServer.class new file mode 100644 index 0000000..cd8ea00 Binary files /dev/null and b/build/classes/java/main/dslab/mailbox/MailboxServer.class differ diff --git a/build/classes/java/main/dslab/monitoring/IMonitoringServer.class b/build/classes/java/main/dslab/monitoring/IMonitoringServer.class new file mode 100644 index 0000000..ae9379e Binary files /dev/null and b/build/classes/java/main/dslab/monitoring/IMonitoringServer.class differ diff --git a/build/classes/java/main/dslab/monitoring/MonitoringServer.class b/build/classes/java/main/dslab/monitoring/MonitoringServer.class new file mode 100644 index 0000000..78df94b Binary files /dev/null and b/build/classes/java/main/dslab/monitoring/MonitoringServer.class differ diff --git a/build/classes/java/main/dslab/nameserver/AlreadyRegisteredException.class b/build/classes/java/main/dslab/nameserver/AlreadyRegisteredException.class new file mode 100644 index 0000000..31d190a Binary files /dev/null and b/build/classes/java/main/dslab/nameserver/AlreadyRegisteredException.class differ diff --git a/build/classes/java/main/dslab/nameserver/INameserver.class b/build/classes/java/main/dslab/nameserver/INameserver.class new file mode 100644 index 0000000..9ce60dd Binary files /dev/null and b/build/classes/java/main/dslab/nameserver/INameserver.class differ diff --git a/build/classes/java/main/dslab/nameserver/INameserverRemote.class b/build/classes/java/main/dslab/nameserver/INameserverRemote.class new file mode 100644 index 0000000..e80e2bf Binary files /dev/null and b/build/classes/java/main/dslab/nameserver/INameserverRemote.class differ diff --git a/build/classes/java/main/dslab/nameserver/InvalidDomainException.class b/build/classes/java/main/dslab/nameserver/InvalidDomainException.class new file mode 100644 index 0000000..b547865 Binary files /dev/null and b/build/classes/java/main/dslab/nameserver/InvalidDomainException.class differ diff --git a/build/classes/java/main/dslab/nameserver/Nameserver.class b/build/classes/java/main/dslab/nameserver/Nameserver.class new file mode 100644 index 0000000..cfd93f8 Binary files /dev/null and b/build/classes/java/main/dslab/nameserver/Nameserver.class differ diff --git a/build/classes/java/main/dslab/transfer/ITransferServer.class b/build/classes/java/main/dslab/transfer/ITransferServer.class new file mode 100644 index 0000000..ca6a79a Binary files /dev/null and b/build/classes/java/main/dslab/transfer/ITransferServer.class differ diff --git a/build/classes/java/main/dslab/transfer/TransferServer.class b/build/classes/java/main/dslab/transfer/TransferServer.class new file mode 100644 index 0000000..3c424fe Binary files /dev/null and b/build/classes/java/main/dslab/transfer/TransferServer.class differ diff --git a/build/classes/java/main/dslab/util/Config.class b/build/classes/java/main/dslab/util/Config.class new file mode 100644 index 0000000..6396443 Binary files /dev/null and b/build/classes/java/main/dslab/util/Config.class differ diff --git a/build/classes/java/main/dslab/util/Keys.class b/build/classes/java/main/dslab/util/Keys.class new file mode 100644 index 0000000..530757b Binary files /dev/null and b/build/classes/java/main/dslab/util/Keys.class differ diff --git a/build/classes/java/test/dslab/CheckedConsumer.class b/build/classes/java/test/dslab/CheckedConsumer.class new file mode 100644 index 0000000..70f7ea8 Binary files /dev/null and b/build/classes/java/test/dslab/CheckedConsumer.class differ diff --git a/build/classes/java/test/dslab/Constants.class b/build/classes/java/test/dslab/Constants.class new file mode 100644 index 0000000..71d7955 Binary files /dev/null and b/build/classes/java/test/dslab/Constants.class differ diff --git a/build/classes/java/test/dslab/JunitSocketClient.class b/build/classes/java/test/dslab/JunitSocketClient.class new file mode 100644 index 0000000..cdd77a7 Binary files /dev/null and b/build/classes/java/test/dslab/JunitSocketClient.class differ diff --git a/build/classes/java/test/dslab/NullOutputStream.class b/build/classes/java/test/dslab/NullOutputStream.class new file mode 100644 index 0000000..39e2ba7 Binary files /dev/null and b/build/classes/java/test/dslab/NullOutputStream.class differ diff --git a/build/classes/java/test/dslab/SimpleTcpServer.class b/build/classes/java/test/dslab/SimpleTcpServer.class new file mode 100644 index 0000000..0b2d687 Binary files /dev/null and b/build/classes/java/test/dslab/SimpleTcpServer.class differ diff --git a/build/classes/java/test/dslab/Sockets.class b/build/classes/java/test/dslab/Sockets.class new file mode 100644 index 0000000..d0f1934 Binary files /dev/null and b/build/classes/java/test/dslab/Sockets.class differ diff --git a/build/classes/java/test/dslab/StreamListener.class b/build/classes/java/test/dslab/StreamListener.class new file mode 100644 index 0000000..46f7b9e Binary files /dev/null and b/build/classes/java/test/dslab/StreamListener.class differ diff --git a/build/classes/java/test/dslab/StringMatches.class b/build/classes/java/test/dslab/StringMatches.class new file mode 100644 index 0000000..bd9912e Binary files /dev/null and b/build/classes/java/test/dslab/StringMatches.class differ diff --git a/build/classes/java/test/dslab/TestBase.class b/build/classes/java/test/dslab/TestBase.class new file mode 100644 index 0000000..497dc46 Binary files /dev/null and b/build/classes/java/test/dslab/TestBase.class differ diff --git a/build/classes/java/test/dslab/TestInputStream.class b/build/classes/java/test/dslab/TestInputStream.class new file mode 100644 index 0000000..2a9167b Binary files /dev/null and b/build/classes/java/test/dslab/TestInputStream.class differ diff --git a/build/classes/java/test/dslab/TestOutputStream.class b/build/classes/java/test/dslab/TestOutputStream.class new file mode 100644 index 0000000..b48374d Binary files /dev/null and b/build/classes/java/test/dslab/TestOutputStream.class differ diff --git a/build/classes/java/test/dslab/client/MessageClientMailboxTest.class b/build/classes/java/test/dslab/client/MessageClientMailboxTest.class new file mode 100644 index 0000000..bae534e Binary files /dev/null and b/build/classes/java/test/dslab/client/MessageClientMailboxTest.class differ diff --git a/build/classes/java/test/dslab/client/MessageClientStartupTest.class b/build/classes/java/test/dslab/client/MessageClientStartupTest.class new file mode 100644 index 0000000..57ce0d2 Binary files /dev/null and b/build/classes/java/test/dslab/client/MessageClientStartupTest.class differ diff --git a/build/classes/java/test/dslab/mailbox/MailboxServerProtocolTest.class b/build/classes/java/test/dslab/mailbox/MailboxServerProtocolTest.class new file mode 100644 index 0000000..6063505 Binary files /dev/null and b/build/classes/java/test/dslab/mailbox/MailboxServerProtocolTest.class differ diff --git a/build/classes/java/test/dslab/mailbox/MailboxServerTest.class b/build/classes/java/test/dslab/mailbox/MailboxServerTest.class new file mode 100644 index 0000000..1070c81 Binary files /dev/null and b/build/classes/java/test/dslab/mailbox/MailboxServerTest.class differ diff --git a/build/classes/java/test/dslab/mailbox/MailboxStartsecureTest.class b/build/classes/java/test/dslab/mailbox/MailboxStartsecureTest.class new file mode 100644 index 0000000..cc48265 Binary files /dev/null and b/build/classes/java/test/dslab/mailbox/MailboxStartsecureTest.class differ diff --git a/build/classes/java/test/dslab/monitoring/MonitoringServerProtocolTest.class b/build/classes/java/test/dslab/monitoring/MonitoringServerProtocolTest.class new file mode 100644 index 0000000..5a3f071 Binary files /dev/null and b/build/classes/java/test/dslab/monitoring/MonitoringServerProtocolTest.class differ diff --git a/build/classes/java/test/dslab/monitoring/MonitoringServerTest.class b/build/classes/java/test/dslab/monitoring/MonitoringServerTest.class new file mode 100644 index 0000000..2fa81c3 Binary files /dev/null and b/build/classes/java/test/dslab/monitoring/MonitoringServerTest.class differ diff --git a/build/classes/java/test/dslab/naming/NameserverTest.class b/build/classes/java/test/dslab/naming/NameserverTest.class new file mode 100644 index 0000000..e63db56 Binary files /dev/null and b/build/classes/java/test/dslab/naming/NameserverTest.class differ diff --git a/build/classes/java/test/dslab/transfer/TransferServerProtocolTest.class b/build/classes/java/test/dslab/transfer/TransferServerProtocolTest.class new file mode 100644 index 0000000..655a84f Binary files /dev/null and b/build/classes/java/test/dslab/transfer/TransferServerProtocolTest.class differ diff --git a/build/classes/java/test/dslab/transfer/TransferServerTest.class b/build/classes/java/test/dslab/transfer/TransferServerTest.class new file mode 100644 index 0000000..94fa2d1 Binary files /dev/null and b/build/classes/java/test/dslab/transfer/TransferServerTest.class differ diff --git a/build/libs/dslab20-2020.jar b/build/libs/dslab20-2020.jar new file mode 100644 index 0000000..0d43929 Binary files /dev/null and b/build/libs/dslab20-2020.jar differ diff --git a/build/reports/tests/test/classes/dslab.client.MessageClientMailboxTest.html b/build/reports/tests/test/classes/dslab.client.MessageClientMailboxTest.html new file mode 100644 index 0000000..780b84f --- /dev/null +++ b/build/reports/tests/test/classes/dslab.client.MessageClientMailboxTest.html @@ -0,0 +1,358 @@ + + + + + +Test results - Class dslab.client.MessageClientMailboxTest + + + + + +
+

Class dslab.client.MessageClientMailboxTest

+ +
+ + + + + +
+
+ + + + + + + +
+
+
2
+

tests

+
+
+
+
2
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.008s
+

duration

+
+
+
+
+
+
0%
+

successful

+
+
+
+
+ +
+

Failed tests

+
+ +

inbox_mulipleMails_showsAllInboxDataCorrectly

+ +
java.lang.NumberFormatException: For input string: "port_range+2"
+	at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
+	at java.base/java.lang.Integer.parseInt(Integer.java:652)
+	at java.base/java.lang.Integer.parseInt(Integer.java:770)
+	at dslab.util.Config.getInt(Config.java:52)
+	at dslab.client.MessageClientMailboxTest.setUp(MessageClientMailboxTest.java:59)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
+	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
+	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
+	at org.junit.rules.Verifier$1.evaluate(Verifier.java:35)
+	at org.junit.rules.RunRules.evaluate(RunRules.java:20)
+	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
+	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
+	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:110)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:38)
+	at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:62)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:119)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:414)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
+	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
+	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
+	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
+	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
+	at java.base/java.lang.Thread.run(Thread.java:834)
+
+
+ +
java.lang.NullPointerException
+	at dslab.client.MessageClientMailboxTest.tearDown(MessageClientMailboxTest.java:74)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
+	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:33)
+	at org.junit.rules.Verifier$1.evaluate(Verifier.java:35)
+	at org.junit.rules.RunRules.evaluate(RunRules.java:20)
+	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
+	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
+	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:110)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:38)
+	at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:62)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:119)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:414)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
+	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
+	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
+	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
+	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
+	at java.base/java.lang.Thread.run(Thread.java:834)
+
+
+
+
+ +

inbox_singleMail_showsAllInboxDataCorrectly

+ +
java.lang.NumberFormatException: For input string: "port_range+2"
+	at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
+	at java.base/java.lang.Integer.parseInt(Integer.java:652)
+	at java.base/java.lang.Integer.parseInt(Integer.java:770)
+	at dslab.util.Config.getInt(Config.java:52)
+	at dslab.client.MessageClientMailboxTest.setUp(MessageClientMailboxTest.java:59)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
+	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
+	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
+	at org.junit.rules.Verifier$1.evaluate(Verifier.java:35)
+	at org.junit.rules.RunRules.evaluate(RunRules.java:20)
+	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
+	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
+	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:110)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:38)
+	at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:62)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:119)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:414)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
+	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
+	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
+	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
+	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
+	at java.base/java.lang.Thread.run(Thread.java:834)
+
+
+ +
java.lang.NullPointerException
+	at dslab.client.MessageClientMailboxTest.tearDown(MessageClientMailboxTest.java:74)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
+	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:33)
+	at org.junit.rules.Verifier$1.evaluate(Verifier.java:35)
+	at org.junit.rules.RunRules.evaluate(RunRules.java:20)
+	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
+	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
+	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:110)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:38)
+	at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:62)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:119)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:414)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
+	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
+	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
+	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
+	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
+	at java.base/java.lang.Thread.run(Thread.java:834)
+
+
+
+
+
+

Tests

+ + + + + + + + + + + + + + + + + + +
TestDurationResult
inbox_mulipleMails_showsAllInboxDataCorrectly0.004sfailed
inbox_singleMail_showsAllInboxDataCorrectly0.004sfailed
+
+
+

Standard error

+ +
Nov 26, 2020 10:42:20 AM dslab.client.MessageClientMailboxTest setUp
+INFO: Creating mailbox server
+Nov 26, 2020 10:42:20 AM dslab.client.MessageClientMailboxTest setUp
+INFO: Waiting for mailbox server sockets
+Nov 26, 2020 10:42:20 AM dslab.client.MessageClientMailboxTest setUp
+INFO: Creating mailbox server
+Nov 26, 2020 10:42:20 AM dslab.client.MessageClientMailboxTest setUp
+INFO: Waiting for mailbox server sockets
+
+
+
+
+ +
+ + diff --git a/build/reports/tests/test/classes/dslab.client.MessageClientStartupTest.html b/build/reports/tests/test/classes/dslab.client.MessageClientStartupTest.html new file mode 100644 index 0000000..2cea00b --- /dev/null +++ b/build/reports/tests/test/classes/dslab.client.MessageClientStartupTest.html @@ -0,0 +1,219 @@ + + + + + +Test results - Class dslab.client.MessageClientStartupTest + + + + + +
+

Class dslab.client.MessageClientStartupTest

+ +
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
1
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.003s
+

duration

+
+
+
+
+
+
0%
+

successful

+
+
+
+
+ +
+

Failed tests

+
+ +

startClient_shouldConnectToMailboxServerAndSendStartsecure

+ +
java.lang.NumberFormatException: For input string: "port_range+3"
+	at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
+	at java.base/java.lang.Integer.parseInt(Integer.java:652)
+	at java.base/java.lang.Integer.parseInt(Integer.java:770)
+	at dslab.util.Config.getInt(Config.java:52)
+	at dslab.client.MessageClientStartupTest.setUp(MessageClientStartupTest.java:37)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
+	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
+	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
+	at org.junit.rules.Verifier$1.evaluate(Verifier.java:35)
+	at org.junit.rules.RunRules.evaluate(RunRules.java:20)
+	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
+	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
+	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:110)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:38)
+	at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:62)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:119)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:414)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
+	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
+	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
+	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
+	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
+	at java.base/java.lang.Thread.run(Thread.java:834)
+
+
+ +
java.lang.NullPointerException
+	at dslab.client.MessageClientStartupTest.tearDown(MessageClientStartupTest.java:48)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
+	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:33)
+	at org.junit.rules.Verifier$1.evaluate(Verifier.java:35)
+	at org.junit.rules.RunRules.evaluate(RunRules.java:20)
+	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
+	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
+	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:110)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:38)
+	at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:62)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:119)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:414)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
+	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
+	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
+	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
+	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
+	at java.base/java.lang.Thread.run(Thread.java:834)
+
+
+
+
+
+

Tests

+ + + + + + + + + + + + + +
TestDurationResult
startClient_shouldConnectToMailboxServerAndSendStartsecure0.003sfailed
+
+
+ +
+ + diff --git a/build/reports/tests/test/classes/dslab.mailbox.MailboxServerProtocolTest.html b/build/reports/tests/test/classes/dslab.mailbox.MailboxServerProtocolTest.html new file mode 100644 index 0000000..e5186ce --- /dev/null +++ b/build/reports/tests/test/classes/dslab.mailbox.MailboxServerProtocolTest.html @@ -0,0 +1,225 @@ + + + + + +Test results - Class dslab.mailbox.MailboxServerProtocolTest + + + + + +
+

Class dslab.mailbox.MailboxServerProtocolTest

+ +
+ + + + + +
+
+ + + + + + + +
+
+
4
+

tests

+
+
+
+
4
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
12.017s
+

duration

+
+
+
+
+
+
0%
+

successful

+
+
+
+
+ +
+

Failed tests

+
+ +

acceptDmtpMessage_listDmapMessage

+ +
java.lang.NumberFormatException: For input string: "port_range+3"
+	at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
+	at java.base/java.lang.Integer.parseInt(Integer.java:652)
+	at java.base/java.lang.Integer.parseInt(Integer.java:770)
+	at dslab.util.Config.getInt(Config.java:52)
+	at dslab.mailbox.MailboxServerProtocolTest.setUp(MailboxServerProtocolTest.java:31)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
+	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
+	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
+	at org.junit.rules.Verifier$1.evaluate(Verifier.java:35)
+	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298)
+	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292)
+	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
+	at java.base/java.lang.Thread.run(Thread.java:834)
+
+
+
+
+ +

dmtpMessage_withUnknownRecipient_returnsError

+ +
java.lang.NumberFormatException: For input string: "port_range+3"
+	at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
+	at java.base/java.lang.Integer.parseInt(Integer.java:652)
+	at java.base/java.lang.Integer.parseInt(Integer.java:770)
+	at dslab.util.Config.getInt(Config.java:52)
+	at dslab.mailbox.MailboxServerProtocolTest.setUp(MailboxServerProtocolTest.java:31)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
+	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
+	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
+	at org.junit.rules.Verifier$1.evaluate(Verifier.java:35)
+	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298)
+	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292)
+	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
+	at java.base/java.lang.Thread.run(Thread.java:834)
+
+
+
+
+ +

loginAndLogout_withValidLogin

+ +
java.lang.NumberFormatException: For input string: "port_range+3"
+	at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
+	at java.base/java.lang.Integer.parseInt(Integer.java:652)
+	at java.base/java.lang.Integer.parseInt(Integer.java:770)
+	at dslab.util.Config.getInt(Config.java:52)
+	at dslab.mailbox.MailboxServerProtocolTest.setUp(MailboxServerProtocolTest.java:31)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
+	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
+	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
+	at org.junit.rules.Verifier$1.evaluate(Verifier.java:35)
+	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298)
+	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292)
+	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
+	at java.base/java.lang.Thread.run(Thread.java:834)
+
+
+
+
+ +

login_withInvalidLogin_returnsError

+ +
java.lang.NumberFormatException: For input string: "port_range+3"
+	at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
+	at java.base/java.lang.Integer.parseInt(Integer.java:652)
+	at java.base/java.lang.Integer.parseInt(Integer.java:770)
+	at dslab.util.Config.getInt(Config.java:52)
+	at dslab.mailbox.MailboxServerProtocolTest.setUp(MailboxServerProtocolTest.java:31)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
+	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
+	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
+	at org.junit.rules.Verifier$1.evaluate(Verifier.java:35)
+	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298)
+	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292)
+	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
+	at java.base/java.lang.Thread.run(Thread.java:834)
+
+
+
+
+
+

Tests

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TestDurationResult
acceptDmtpMessage_listDmapMessage3.002sfailed
dmtpMessage_withUnknownRecipient_returnsError3.012sfailed
loginAndLogout_withValidLogin3.002sfailed
login_withInvalidLogin_returnsError3.001sfailed
+
+
+ +
+ + diff --git a/build/reports/tests/test/classes/dslab.mailbox.MailboxServerTest.html b/build/reports/tests/test/classes/dslab.mailbox.MailboxServerTest.html new file mode 100644 index 0000000..17efb53 --- /dev/null +++ b/build/reports/tests/test/classes/dslab.mailbox.MailboxServerTest.html @@ -0,0 +1,129 @@ + + + + + +Test results - Class dslab.mailbox.MailboxServerTest + + + + + +
+

Class dslab.mailbox.MailboxServerTest

+ +
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
1
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.003s
+

duration

+
+
+
+
+
+
0%
+

successful

+
+
+
+
+ +
+

Failed tests

+
+ +

runAndShutdownTransferServer_createsAndStopsTcpSocketCorrectly

+ +
java.lang.NumberFormatException: For input string: "port_range+2"
+	at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
+	at java.base/java.lang.Integer.parseInt(Integer.java:652)
+	at java.base/java.lang.Integer.parseInt(Integer.java:770)
+	at dslab.util.Config.getInt(Config.java:52)
+	at dslab.mailbox.MailboxServerTest.runAndShutdownTransferServer_createsAndStopsTcpSocketCorrectly(MailboxServerTest.java:33)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
+	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
+	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
+	at org.junit.rules.Verifier$1.evaluate(Verifier.java:35)
+	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298)
+	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292)
+	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
+	at java.base/java.lang.Thread.run(Thread.java:834)
+
+
+
+
+
+

Tests

+ + + + + + + + + + + + + +
TestDurationResult
runAndShutdownTransferServer_createsAndStopsTcpSocketCorrectly0.003sfailed
+
+
+ +
+ + diff --git a/build/reports/tests/test/classes/dslab.mailbox.MailboxStartsecureTest.html b/build/reports/tests/test/classes/dslab.mailbox.MailboxStartsecureTest.html new file mode 100644 index 0000000..1bdfddf --- /dev/null +++ b/build/reports/tests/test/classes/dslab.mailbox.MailboxStartsecureTest.html @@ -0,0 +1,129 @@ + + + + + +Test results - Class dslab.mailbox.MailboxStartsecureTest + + + + + +
+

Class dslab.mailbox.MailboxStartsecureTest

+ +
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
1
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
3.003s
+

duration

+
+
+
+
+
+
0%
+

successful

+
+
+
+
+ +
+

Failed tests

+
+ +

sendStartsecure

+ +
java.lang.NumberFormatException: For input string: "port_range+3"
+	at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
+	at java.base/java.lang.Integer.parseInt(Integer.java:652)
+	at java.base/java.lang.Integer.parseInt(Integer.java:770)
+	at dslab.util.Config.getInt(Config.java:52)
+	at dslab.mailbox.MailboxStartsecureTest.setUp(MailboxStartsecureTest.java:31)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
+	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
+	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
+	at org.junit.rules.Verifier$1.evaluate(Verifier.java:35)
+	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298)
+	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292)
+	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
+	at java.base/java.lang.Thread.run(Thread.java:834)
+
+
+
+
+
+

Tests

+ + + + + + + + + + + + + +
TestDurationResult
sendStartsecure3.003sfailed
+
+
+ +
+ + diff --git a/build/reports/tests/test/classes/dslab.monitoring.MonitoringServerProtocolTest.html b/build/reports/tests/test/classes/dslab.monitoring.MonitoringServerProtocolTest.html new file mode 100644 index 0000000..c6a416f --- /dev/null +++ b/build/reports/tests/test/classes/dslab.monitoring.MonitoringServerProtocolTest.html @@ -0,0 +1,161 @@ + + + + + +Test results - Class dslab.monitoring.MonitoringServerProtocolTest + + + + + +
+

Class dslab.monitoring.MonitoringServerProtocolTest

+ +
+ + + + + +
+
+ + + + + + + +
+
+
2
+

tests

+
+
+
+
2
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
6.020s
+

duration

+
+
+
+
+
+
0%
+

successful

+
+
+
+
+ +
+

Failed tests

+
+ +

addresses_returnsCorrectStatistics

+ +
java.lang.NumberFormatException: For input string: "port_range+8"
+	at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
+	at java.base/java.lang.Integer.parseInt(Integer.java:652)
+	at java.base/java.lang.Integer.parseInt(Integer.java:770)
+	at dslab.util.Config.getInt(Config.java:52)
+	at dslab.monitoring.MonitoringServerProtocolTest.setUp(MonitoringServerProtocolTest.java:36)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
+	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
+	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
+	at org.junit.rules.Verifier$1.evaluate(Verifier.java:35)
+	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298)
+	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292)
+	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
+	at java.base/java.lang.Thread.run(Thread.java:834)
+
+
+
+
+ +

servers_returnsCorrectStatistics

+ +
java.lang.NumberFormatException: For input string: "port_range+8"
+	at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
+	at java.base/java.lang.Integer.parseInt(Integer.java:652)
+	at java.base/java.lang.Integer.parseInt(Integer.java:770)
+	at dslab.util.Config.getInt(Config.java:52)
+	at dslab.monitoring.MonitoringServerProtocolTest.setUp(MonitoringServerProtocolTest.java:36)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
+	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
+	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
+	at org.junit.rules.Verifier$1.evaluate(Verifier.java:35)
+	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298)
+	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292)
+	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
+	at java.base/java.lang.Thread.run(Thread.java:834)
+
+
+
+
+
+

Tests

+ + + + + + + + + + + + + + + + + + +
TestDurationResult
addresses_returnsCorrectStatistics3.002sfailed
servers_returnsCorrectStatistics3.018sfailed
+
+
+ +
+ + diff --git a/build/reports/tests/test/classes/dslab.monitoring.MonitoringServerTest.html b/build/reports/tests/test/classes/dslab.monitoring.MonitoringServerTest.html new file mode 100644 index 0000000..e408caf --- /dev/null +++ b/build/reports/tests/test/classes/dslab.monitoring.MonitoringServerTest.html @@ -0,0 +1,129 @@ + + + + + +Test results - Class dslab.monitoring.MonitoringServerTest + + + + + +
+

Class dslab.monitoring.MonitoringServerTest

+ +
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
1
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.002s
+

duration

+
+
+
+
+
+
0%
+

successful

+
+
+
+
+ +
+

Failed tests

+
+ +

runAndShutdownMonitoringServer_createsAndStopsUdpSocketCorrectly

+ +
java.lang.NumberFormatException: For input string: "port_range+8"
+	at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
+	at java.base/java.lang.Integer.parseInt(Integer.java:652)
+	at java.base/java.lang.Integer.parseInt(Integer.java:770)
+	at dslab.util.Config.getInt(Config.java:52)
+	at dslab.monitoring.MonitoringServerTest.runAndShutdownMonitoringServer_createsAndStopsUdpSocketCorrectly(MonitoringServerTest.java:27)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
+	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
+	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
+	at org.junit.rules.Verifier$1.evaluate(Verifier.java:35)
+	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298)
+	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292)
+	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
+	at java.base/java.lang.Thread.run(Thread.java:834)
+
+
+
+
+
+

Tests

+ + + + + + + + + + + + + +
TestDurationResult
runAndShutdownMonitoringServer_createsAndStopsUdpSocketCorrectly0.002sfailed
+
+
+ +
+ + diff --git a/build/reports/tests/test/classes/dslab.naming.NameserverTest.html b/build/reports/tests/test/classes/dslab.naming.NameserverTest.html new file mode 100644 index 0000000..be1ee8c --- /dev/null +++ b/build/reports/tests/test/classes/dslab.naming.NameserverTest.html @@ -0,0 +1,250 @@ + + + + + +Test results - Class dslab.naming.NameserverTest + + + + + +
+

Class dslab.naming.NameserverTest

+ +
+ + + + + +
+
+ + + + + + + +
+
+
4
+

tests

+
+
+
+
4
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
36.056s
+

duration

+
+
+
+
+
+
0%
+

successful

+
+
+
+
+ +
+

Failed tests

+
+ +

ns01_startAndShutdownRootNameserver_createsAndUnexportsRegistryCorrectly

+ +
java.lang.NumberFormatException: For input string: "port_range+9"
+	at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
+	at java.base/java.lang.Integer.parseInt(Integer.java:652)
+	at java.base/java.lang.Integer.parseInt(Integer.java:770)
+	at dslab.util.Config.getInt(Config.java:52)
+	at dslab.naming.NameserverTest.ns01_startAndShutdownRootNameserver_createsAndUnexportsRegistryCorrectly(NameserverTest.java:78)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
+	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
+	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298)
+	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292)
+	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
+	at java.base/java.lang.Thread.run(Thread.java:834)
+
+
+
+
+ +

ns02_startRootNameserver_registersRemoteObjectCorrectly

+ +
java.lang.NumberFormatException: For input string: "port_range+9"
+	at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
+	at java.base/java.lang.Integer.parseInt(Integer.java:652)
+	at java.base/java.lang.Integer.parseInt(Integer.java:770)
+	at dslab.util.Config.getInt(Config.java:52)
+	at dslab.naming.NameserverTest.ns02_startRootNameserver_registersRemoteObjectCorrectly(NameserverTest.java:109)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
+	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
+	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298)
+	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292)
+	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
+	at java.base/java.lang.Thread.run(Thread.java:834)
+
+
+
+
+ +

ns03_startingZoneNameserver_registersNameserverCorrectly

+ +
java.lang.NumberFormatException: For input string: "port_range+9"
+	at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
+	at java.base/java.lang.Integer.parseInt(Integer.java:652)
+	at java.base/java.lang.Integer.parseInt(Integer.java:770)
+	at dslab.util.Config.getInt(Config.java:52)
+	at dslab.naming.NameserverTest.ns03_startingZoneNameserver_registersNameserverCorrectly(NameserverTest.java:141)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
+	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
+	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298)
+	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292)
+	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
+	at java.base/java.lang.Thread.run(Thread.java:834)
+
+
+
+
+ +

ns04_registerAndLookupMailboxServer_registersAndReturnsAddressCorrectly

+ +
java.lang.NumberFormatException: For input string: "port_range+9"
+	at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
+	at java.base/java.lang.Integer.parseInt(Integer.java:652)
+	at java.base/java.lang.Integer.parseInt(Integer.java:770)
+	at dslab.util.Config.getInt(Config.java:52)
+	at dslab.naming.NameserverTest.ns04_registerAndLookupMailboxServer_registersAndReturnsAddressCorrectly(NameserverTest.java:185)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
+	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
+	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298)
+	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292)
+	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
+	at java.base/java.lang.Thread.run(Thread.java:834)
+
+
+
+
+
+

Tests

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TestDurationResult
ns01_startAndShutdownRootNameserver_createsAndUnexportsRegistryCorrectly6.038sfailed
ns02_startRootNameserver_registersRemoteObjectCorrectly6.005sfailed
ns03_startingZoneNameserver_registersNameserverCorrectly12.007sfailed
ns04_registerAndLookupMailboxServer_registersAndReturnsAddressCorrectly12.006sfailed
+
+
+

Standard error

+ +
Nov 26, 2020 10:41:23 AM dslab.naming.NameserverTest ns01_startAndShutdownRootNameserver_createsAndUnexportsRegistryCorrectly
+INFO: Starting ns-root thread
+Nov 26, 2020 10:41:26 AM dslab.naming.NameserverTest sendShutdown
+INFO: Sending shutdown to component component
+Nov 26, 2020 10:41:29 AM dslab.naming.NameserverTest ns02_startRootNameserver_registersRemoteObjectCorrectly
+INFO: Starting ns-root thread
+Nov 26, 2020 10:41:32 AM dslab.naming.NameserverTest sendShutdown
+INFO: Sending shutdown to component component
+Nov 26, 2020 10:41:35 AM dslab.naming.NameserverTest ns03_startingZoneNameserver_registersNameserverCorrectly
+INFO: Starting ns-root thread
+Nov 26, 2020 10:41:38 AM dslab.naming.NameserverTest ns03_startingZoneNameserver_registersNameserverCorrectly
+INFO: Starting ns-planet thread
+Nov 26, 2020 10:41:41 AM dslab.naming.NameserverTest sendShutdown
+INFO: Sending shutdown to component component
+Nov 26, 2020 10:41:44 AM dslab.naming.NameserverTest sendShutdown
+INFO: Sending shutdown to component component
+Nov 26, 2020 10:41:47 AM dslab.naming.NameserverTest ns04_registerAndLookupMailboxServer_registersAndReturnsAddressCorrectly
+INFO: Starting ns-root thread
+Nov 26, 2020 10:41:50 AM dslab.naming.NameserverTest ns04_registerAndLookupMailboxServer_registersAndReturnsAddressCorrectly
+INFO: Starting ns-planet thread
+Nov 26, 2020 10:41:53 AM dslab.naming.NameserverTest sendShutdown
+INFO: Sending shutdown to component component
+Nov 26, 2020 10:41:56 AM dslab.naming.NameserverTest sendShutdown
+INFO: Sending shutdown to component component
+
+
+
+
+ +
+ + diff --git a/build/reports/tests/test/classes/dslab.transfer.TransferServerProtocolTest.html b/build/reports/tests/test/classes/dslab.transfer.TransferServerProtocolTest.html new file mode 100644 index 0000000..4067809 --- /dev/null +++ b/build/reports/tests/test/classes/dslab.transfer.TransferServerProtocolTest.html @@ -0,0 +1,161 @@ + + + + + +Test results - Class dslab.transfer.TransferServerProtocolTest + + + + + +
+

Class dslab.transfer.TransferServerProtocolTest

+ +
+ + + + + +
+
+ + + + + + + +
+
+
2
+

tests

+
+
+
+
2
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
6.005s
+

duration

+
+
+
+
+
+
0%
+

successful

+
+
+
+
+ +
+

Failed tests

+
+ +

defaultDmtpInteractionTest

+ +
java.lang.NumberFormatException: For input string: "port_range"
+	at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
+	at java.base/java.lang.Integer.parseInt(Integer.java:652)
+	at java.base/java.lang.Integer.parseInt(Integer.java:770)
+	at dslab.util.Config.getInt(Config.java:52)
+	at dslab.transfer.TransferServerProtocolTest.setUp(TransferServerProtocolTest.java:31)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
+	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
+	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
+	at org.junit.rules.Verifier$1.evaluate(Verifier.java:35)
+	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298)
+	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292)
+	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
+	at java.base/java.lang.Thread.run(Thread.java:834)
+
+
+
+
+ +

sendWithoutRecipient_returnsErrorOnSend

+ +
java.lang.NumberFormatException: For input string: "port_range"
+	at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
+	at java.base/java.lang.Integer.parseInt(Integer.java:652)
+	at java.base/java.lang.Integer.parseInt(Integer.java:770)
+	at dslab.util.Config.getInt(Config.java:52)
+	at dslab.transfer.TransferServerProtocolTest.setUp(TransferServerProtocolTest.java:31)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
+	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
+	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
+	at org.junit.rules.Verifier$1.evaluate(Verifier.java:35)
+	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298)
+	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292)
+	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
+	at java.base/java.lang.Thread.run(Thread.java:834)
+
+
+
+
+
+

Tests

+ + + + + + + + + + + + + + + + + + +
TestDurationResult
defaultDmtpInteractionTest3.004sfailed
sendWithoutRecipient_returnsErrorOnSend3.001sfailed
+
+
+ +
+ + diff --git a/build/reports/tests/test/classes/dslab.transfer.TransferServerTest.html b/build/reports/tests/test/classes/dslab.transfer.TransferServerTest.html new file mode 100644 index 0000000..bd2f319 --- /dev/null +++ b/build/reports/tests/test/classes/dslab.transfer.TransferServerTest.html @@ -0,0 +1,129 @@ + + + + + +Test results - Class dslab.transfer.TransferServerTest + + + + + +
+

Class dslab.transfer.TransferServerTest

+ +
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
1
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0s
+

duration

+
+
+
+
+
+
0%
+

successful

+
+
+
+
+ +
+

Failed tests

+
+ +

runAndShutdownTransferServer_createsAndStopsTcpSocketCorrectly

+ +
java.lang.NumberFormatException: For input string: "port_range"
+	at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
+	at java.base/java.lang.Integer.parseInt(Integer.java:652)
+	at java.base/java.lang.Integer.parseInt(Integer.java:770)
+	at dslab.util.Config.getInt(Config.java:52)
+	at dslab.transfer.TransferServerTest.runAndShutdownTransferServer_createsAndStopsTcpSocketCorrectly(TransferServerTest.java:30)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
+	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
+	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
+	at org.junit.rules.Verifier$1.evaluate(Verifier.java:35)
+	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298)
+	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292)
+	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
+	at java.base/java.lang.Thread.run(Thread.java:834)
+
+
+
+
+
+

Tests

+ + + + + + + + + + + + + +
TestDurationResult
runAndShutdownTransferServer_createsAndStopsTcpSocketCorrectly0sfailed
+
+
+ +
+ + diff --git a/build/reports/tests/test/css/base-style.css b/build/reports/tests/test/css/base-style.css new file mode 100644 index 0000000..4afa73e --- /dev/null +++ b/build/reports/tests/test/css/base-style.css @@ -0,0 +1,179 @@ + +body { + margin: 0; + padding: 0; + font-family: sans-serif; + font-size: 12pt; +} + +body, a, a:visited { + color: #303030; +} + +#content { + padding-left: 50px; + padding-right: 50px; + padding-top: 30px; + padding-bottom: 30px; +} + +#content h1 { + font-size: 160%; + margin-bottom: 10px; +} + +#footer { + margin-top: 100px; + font-size: 80%; + white-space: nowrap; +} + +#footer, #footer a { + color: #a0a0a0; +} + +#line-wrapping-toggle { + vertical-align: middle; +} + +#label-for-line-wrapping-toggle { + vertical-align: middle; +} + +ul { + margin-left: 0; +} + +h1, h2, h3 { + white-space: nowrap; +} + +h2 { + font-size: 120%; +} + +ul.tabLinks { + padding-left: 0; + padding-top: 10px; + padding-bottom: 10px; + overflow: auto; + min-width: 800px; + width: auto !important; + width: 800px; +} + +ul.tabLinks li { + float: left; + height: 100%; + list-style: none; + padding-left: 10px; + padding-right: 10px; + padding-top: 5px; + padding-bottom: 5px; + margin-bottom: 0; + -moz-border-radius: 7px; + border-radius: 7px; + margin-right: 25px; + border: solid 1px #d4d4d4; + background-color: #f0f0f0; +} + +ul.tabLinks li:hover { + background-color: #fafafa; +} + +ul.tabLinks li.selected { + background-color: #c5f0f5; + border-color: #c5f0f5; +} + +ul.tabLinks a { + font-size: 120%; + display: block; + outline: none; + text-decoration: none; + margin: 0; + padding: 0; +} + +ul.tabLinks li h2 { + margin: 0; + padding: 0; +} + +div.tab { +} + +div.selected { + display: block; +} + +div.deselected { + display: none; +} + +div.tab table { + min-width: 350px; + width: auto !important; + width: 350px; + border-collapse: collapse; +} + +div.tab th, div.tab table { + border-bottom: solid #d0d0d0 1px; +} + +div.tab th { + text-align: left; + white-space: nowrap; + padding-left: 6em; +} + +div.tab th:first-child { + padding-left: 0; +} + +div.tab td { + white-space: nowrap; + padding-left: 6em; + padding-top: 5px; + padding-bottom: 5px; +} + +div.tab td:first-child { + padding-left: 0; +} + +div.tab td.numeric, div.tab th.numeric { + text-align: right; +} + +span.code { + display: inline-block; + margin-top: 0em; + margin-bottom: 1em; +} + +span.code pre { + font-size: 11pt; + padding-top: 10px; + padding-bottom: 10px; + padding-left: 10px; + padding-right: 10px; + margin: 0; + background-color: #f7f7f7; + border: solid 1px #d0d0d0; + min-width: 700px; + width: auto !important; + width: 700px; +} + +span.wrapped pre { + word-wrap: break-word; + white-space: pre-wrap; + word-break: break-all; +} + +label.hidden { + display: none; +} \ No newline at end of file diff --git a/build/reports/tests/test/css/style.css b/build/reports/tests/test/css/style.css new file mode 100644 index 0000000..3dc4913 --- /dev/null +++ b/build/reports/tests/test/css/style.css @@ -0,0 +1,84 @@ + +#summary { + margin-top: 30px; + margin-bottom: 40px; +} + +#summary table { + border-collapse: collapse; +} + +#summary td { + vertical-align: top; +} + +.breadcrumbs, .breadcrumbs a { + color: #606060; +} + +.infoBox { + width: 110px; + padding-top: 15px; + padding-bottom: 15px; + text-align: center; +} + +.infoBox p { + margin: 0; +} + +.counter, .percent { + font-size: 120%; + font-weight: bold; + margin-bottom: 8px; +} + +#duration { + width: 125px; +} + +#successRate, .summaryGroup { + border: solid 2px #d0d0d0; + -moz-border-radius: 10px; + border-radius: 10px; +} + +#successRate { + width: 140px; + margin-left: 35px; +} + +#successRate .percent { + font-size: 180%; +} + +.success, .success a { + color: #008000; +} + +div.success, #successRate.success { + background-color: #bbd9bb; + border-color: #008000; +} + +.failures, .failures a { + color: #b60808; +} + +.skipped, .skipped a { + color: #c09853; +} + +div.failures, #successRate.failures { + background-color: #ecdada; + border-color: #b60808; +} + +ul.linkList { + padding-left: 0; +} + +ul.linkList li { + list-style: none; + margin-bottom: 5px; +} diff --git a/build/reports/tests/test/index.html b/build/reports/tests/test/index.html new file mode 100644 index 0000000..997a5ff --- /dev/null +++ b/build/reports/tests/test/index.html @@ -0,0 +1,347 @@ + + + + + +Test results - Test Summary + + + + + +
+

Test Summary

+
+ + + + + +
+
+ + + + + + + +
+
+
19
+

tests

+
+
+
+
19
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
1m3.12s
+

duration

+
+
+
+
+
+
0%
+

successful

+
+
+
+
+ + +
+

Packages

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PackageTestsFailuresIgnoredDurationSuccess rate
+dslab.client +3300.011s0%
+dslab.mailbox +66015.023s0%
+dslab.monitoring +3306.022s0%
+dslab.naming +44036.056s0%
+dslab.transfer +3306.005s0%
+
+
+

Classes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ClassTestsFailuresIgnoredDurationSuccess rate
+dslab.client.MessageClientMailboxTest +2200.008s0%
+dslab.client.MessageClientStartupTest +1100.003s0%
+dslab.mailbox.MailboxServerProtocolTest +44012.017s0%
+dslab.mailbox.MailboxServerTest +1100.003s0%
+dslab.mailbox.MailboxStartsecureTest +1103.003s0%
+dslab.monitoring.MonitoringServerProtocolTest +2206.020s0%
+dslab.monitoring.MonitoringServerTest +1100.002s0%
+dslab.naming.NameserverTest +44036.056s0%
+dslab.transfer.TransferServerProtocolTest +2206.005s0%
+dslab.transfer.TransferServerTest +1100s0%
+
+
+ +
+ + diff --git a/build/reports/tests/test/js/report.js b/build/reports/tests/test/js/report.js new file mode 100644 index 0000000..83bab4a --- /dev/null +++ b/build/reports/tests/test/js/report.js @@ -0,0 +1,194 @@ +(function (window, document) { + "use strict"; + + var tabs = {}; + + function changeElementClass(element, classValue) { + if (element.getAttribute("className")) { + element.setAttribute("className", classValue); + } else { + element.setAttribute("class", classValue); + } + } + + function getClassAttribute(element) { + if (element.getAttribute("className")) { + return element.getAttribute("className"); + } else { + return element.getAttribute("class"); + } + } + + function addClass(element, classValue) { + changeElementClass(element, getClassAttribute(element) + " " + classValue); + } + + function removeClass(element, classValue) { + changeElementClass(element, getClassAttribute(element).replace(classValue, "")); + } + + function initTabs() { + var container = document.getElementById("tabs"); + + tabs.tabs = findTabs(container); + tabs.titles = findTitles(tabs.tabs); + tabs.headers = findHeaders(container); + tabs.select = select; + tabs.deselectAll = deselectAll; + tabs.select(0); + + return true; + } + + function getCheckBox() { + return document.getElementById("line-wrapping-toggle"); + } + + function getLabelForCheckBox() { + return document.getElementById("label-for-line-wrapping-toggle"); + } + + function findCodeBlocks() { + var spans = document.getElementById("tabs").getElementsByTagName("span"); + var codeBlocks = []; + for (var i = 0; i < spans.length; ++i) { + if (spans[i].className.indexOf("code") >= 0) { + codeBlocks.push(spans[i]); + } + } + return codeBlocks; + } + + function forAllCodeBlocks(operation) { + var codeBlocks = findCodeBlocks(); + + for (var i = 0; i < codeBlocks.length; ++i) { + operation(codeBlocks[i], "wrapped"); + } + } + + function toggleLineWrapping() { + var checkBox = getCheckBox(); + + if (checkBox.checked) { + forAllCodeBlocks(addClass); + } else { + forAllCodeBlocks(removeClass); + } + } + + function initControls() { + if (findCodeBlocks().length > 0) { + var checkBox = getCheckBox(); + var label = getLabelForCheckBox(); + + checkBox.onclick = toggleLineWrapping; + checkBox.checked = false; + + removeClass(label, "hidden"); + } + } + + function switchTab() { + var id = this.id.substr(1); + + for (var i = 0; i < tabs.tabs.length; i++) { + if (tabs.tabs[i].id === id) { + tabs.select(i); + break; + } + } + + return false; + } + + function select(i) { + this.deselectAll(); + + changeElementClass(this.tabs[i], "tab selected"); + changeElementClass(this.headers[i], "selected"); + + while (this.headers[i].firstChild) { + this.headers[i].removeChild(this.headers[i].firstChild); + } + + var h2 = document.createElement("H2"); + + h2.appendChild(document.createTextNode(this.titles[i])); + this.headers[i].appendChild(h2); + } + + function deselectAll() { + for (var i = 0; i < this.tabs.length; i++) { + changeElementClass(this.tabs[i], "tab deselected"); + changeElementClass(this.headers[i], "deselected"); + + while (this.headers[i].firstChild) { + this.headers[i].removeChild(this.headers[i].firstChild); + } + + var a = document.createElement("A"); + + a.setAttribute("id", "ltab" + i); + a.setAttribute("href", "#tab" + i); + a.onclick = switchTab; + a.appendChild(document.createTextNode(this.titles[i])); + + this.headers[i].appendChild(a); + } + } + + function findTabs(container) { + return findChildElements(container, "DIV", "tab"); + } + + function findHeaders(container) { + var owner = findChildElements(container, "UL", "tabLinks"); + return findChildElements(owner[0], "LI", null); + } + + function findTitles(tabs) { + var titles = []; + + for (var i = 0; i < tabs.length; i++) { + var tab = tabs[i]; + var header = findChildElements(tab, "H2", null)[0]; + + header.parentNode.removeChild(header); + + if (header.innerText) { + titles.push(header.innerText); + } else { + titles.push(header.textContent); + } + } + + return titles; + } + + function findChildElements(container, name, targetClass) { + var elements = []; + var children = container.childNodes; + + for (var i = 0; i < children.length; i++) { + var child = children.item(i); + + if (child.nodeType === 1 && child.nodeName === name) { + if (targetClass && child.className.indexOf(targetClass) < 0) { + continue; + } + + elements.push(child); + } + } + + return elements; + } + + // Entry point. + + window.onload = function() { + initTabs(); + initControls(); + }; +} (window, window.document)); \ No newline at end of file diff --git a/build/reports/tests/test/packages/dslab.client.html b/build/reports/tests/test/packages/dslab.client.html new file mode 100644 index 0000000..b870fb7 --- /dev/null +++ b/build/reports/tests/test/packages/dslab.client.html @@ -0,0 +1,133 @@ + + + + + +Test results - Package dslab.client + + + + + +
+

Package dslab.client

+ +
+ + + + + +
+
+ + + + + + + +
+
+
3
+

tests

+
+
+
+
3
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.011s
+

duration

+
+
+
+
+
+
0%
+

successful

+
+
+
+
+ + +
+

Classes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ClassTestsFailuresIgnoredDurationSuccess rate
+MessageClientMailboxTest +2200.008s0%
+MessageClientStartupTest +1100.003s0%
+
+
+ +
+ + diff --git a/build/reports/tests/test/packages/dslab.mailbox.html b/build/reports/tests/test/packages/dslab.mailbox.html new file mode 100644 index 0000000..f057b0f --- /dev/null +++ b/build/reports/tests/test/packages/dslab.mailbox.html @@ -0,0 +1,155 @@ + + + + + +Test results - Package dslab.mailbox + + + + + +
+

Package dslab.mailbox

+ +
+ + + + + +
+
+ + + + + + + +
+
+
6
+

tests

+
+
+
+
6
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
15.023s
+

duration

+
+
+
+
+
+
0%
+

successful

+
+
+
+ + +
+ + diff --git a/build/reports/tests/test/packages/dslab.monitoring.html b/build/reports/tests/test/packages/dslab.monitoring.html new file mode 100644 index 0000000..cc47d67 --- /dev/null +++ b/build/reports/tests/test/packages/dslab.monitoring.html @@ -0,0 +1,133 @@ + + + + + +Test results - Package dslab.monitoring + + + + + +
+

Package dslab.monitoring

+ +
+ + + + + +
+
+ + + + + + + +
+
+
3
+

tests

+
+
+
+
3
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
6.022s
+

duration

+
+
+
+
+
+
0%
+

successful

+
+
+
+
+ + +
+

Classes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ClassTestsFailuresIgnoredDurationSuccess rate
+MonitoringServerProtocolTest +2206.020s0%
+MonitoringServerTest +1100.002s0%
+
+
+ +
+ + diff --git a/build/reports/tests/test/packages/dslab.naming.html b/build/reports/tests/test/packages/dslab.naming.html new file mode 100644 index 0000000..0716044 --- /dev/null +++ b/build/reports/tests/test/packages/dslab.naming.html @@ -0,0 +1,127 @@ + + + + + +Test results - Package dslab.naming + + + + + +
+

Package dslab.naming

+ +
+ + + + + +
+
+ + + + + + + +
+
+
4
+

tests

+
+
+
+
4
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
36.056s
+

duration

+
+
+
+
+
+
0%
+

successful

+
+
+
+ + +
+ + diff --git a/build/reports/tests/test/packages/dslab.transfer.html b/build/reports/tests/test/packages/dslab.transfer.html new file mode 100644 index 0000000..b2c61c4 --- /dev/null +++ b/build/reports/tests/test/packages/dslab.transfer.html @@ -0,0 +1,133 @@ + + + + + +Test results - Package dslab.transfer + + + + + +
+

Package dslab.transfer

+ +
+ + + + + +
+
+ + + + + + + +
+
+
3
+

tests

+
+
+
+
3
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
6.005s
+

duration

+
+
+
+
+
+
0%
+

successful

+
+
+
+
+ + +
+

Classes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ClassTestsFailuresIgnoredDurationSuccess rate
+TransferServerProtocolTest +2206.005s0%
+TransferServerTest +1100s0%
+
+
+ +
+ + diff --git a/build/resources/main/client-arthur.properties b/build/resources/main/client-arthur.properties new file mode 100644 index 0000000..fdcde1f --- /dev/null +++ b/build/resources/main/client-arthur.properties @@ -0,0 +1,10 @@ +# TODO: replace host and port with that of your server +transfer.host=127.0.0.1 +transfer.port=port_range +transfer.email=arthur@earth.planet + +# TODO: replace host and port with that of your server +mailbox.host=127.0.0.1 +mailbox.port=port_range+3 +mailbox.user=arthur +mailbox.password=23456 diff --git a/build/resources/main/client-trillian.properties b/build/resources/main/client-trillian.properties new file mode 100644 index 0000000..0b757d7 --- /dev/null +++ b/build/resources/main/client-trillian.properties @@ -0,0 +1,10 @@ +# TODO: replace host and port with that of your server +transfer.host=127.0.0.1 +transfer.port=port_range +transfer.email=trillian@earth.planet + +# TODO: replace host and port with that of your server +mailbox.host=127.0.0.1 +mailbox.port=port_range+3 +mailbox.user=trillian +mailbox.password=12345 diff --git a/build/resources/main/client-zaphod.properties b/build/resources/main/client-zaphod.properties new file mode 100644 index 0000000..f4f6aa7 --- /dev/null +++ b/build/resources/main/client-zaphod.properties @@ -0,0 +1,10 @@ +# TODO: replace host and port with that of your server +transfer.host=127.0.0.1 +transfer.port=port_range+1 +transfer.email=zaphod@univer.ze + +# TODO: replace host and port with that of your server +mailbox.host=127.0.0.1 +mailbox.port=port_range+5 +mailbox.user=zaphod +mailbox.password=12345 diff --git a/build/resources/main/domains.properties b/build/resources/main/domains.properties new file mode 100644 index 0000000..622fcaa --- /dev/null +++ b/build/resources/main/domains.properties @@ -0,0 +1,4 @@ +# = +# TODO: replace ports with the ports that your mailbox servers use +earth.planet=127.0.0.1:port_range+2 +univer.ze=127.0.0.1:port_range+4 diff --git a/build/resources/main/mailbox-earth-planet.properties b/build/resources/main/mailbox-earth-planet.properties new file mode 100644 index 0000000..acf1724 --- /dev/null +++ b/build/resources/main/mailbox-earth-planet.properties @@ -0,0 +1,25 @@ +# TCP port used for the DMTP server socket +# TODO: REPLACE with real value such as 16502 - considering the port range associated with your account - you have received after Lab 0 a port range (beginning_of_the_range, end_of_the_range) +dmtp.tcp.port=port_range+2 + +# TCP port used for the DMAP server socket +# TODO: REPLACE with real value such as 16503 - considering the port range associated with your account - you have received after Lab 0 a port range (beginning_of_the_range, end_of_the_range) +dmap.tcp.port=port_range+3 + +# mail domain managed by the mailbox server +domain=earth.planet + +# location of the users for this mailbox server +users.config=users-earth-planet.properties + +# ============================================= Required for Assignment 2 + +# name of the root nameserver's remote object +root_id=root-nameserver + +# RMI registry host +registry.host=localhost + +# RMI registry port +# TODO: REPLACE with real value such as 16509 - considering the port range associated with your account - you have received after Lab 0 a port range (beginning_of_the_range, end_of_the_range) +registry.port=port_range+9 diff --git a/build/resources/main/mailbox-univer-ze.properties b/build/resources/main/mailbox-univer-ze.properties new file mode 100644 index 0000000..f07c01d --- /dev/null +++ b/build/resources/main/mailbox-univer-ze.properties @@ -0,0 +1,25 @@ +# TCP port used for the DMTP server socket +# TODO: REPLACE with real value such as 16504 - considering the port range associated with your account - you have received after Lab 0 a port range (beginning_of_the_range, end_of_the_range) +dmtp.tcp.port=port_range+4 + +# TCP port used for the DMAP server socket +# TODO: REPLACE with real value such as 16505 - considering the port range associated with your account - you have received after Lab 0 a port range (beginning_of_the_range, end_of_the_range) +dmap.tcp.port=port_range+5 + +# mail domain managed by the mailbox server +domain=univer.ze + +# location of the users for this mailbox server +users.config=users-univer-ze.properties + +# ============================================= Required for Assignment 2 + +# name of the root nameserver's remote object +root_id=root-nameserver + +# RMI registry host +registry.host=localhost + +# RMI registry port +# TODO: REPLACE with real value such as 16509 - considering the port range associated with your account - you have received after Lab 0 a port range (beginning_of_the_range, end_of_the_range) +registry.port=port_range+9 diff --git a/build/resources/main/monitoring.properties b/build/resources/main/monitoring.properties new file mode 100644 index 0000000..8aff76c --- /dev/null +++ b/build/resources/main/monitoring.properties @@ -0,0 +1,3 @@ +# UDP port used for accepting monitoring packets +# TODO: REPLACE with real value such as 16508 - considering the port range associated with your account - you have received after Lab 0 a port range (beginning_of_the_range, end_of_the_range) +udp.port=port_range+8 diff --git a/build/resources/main/ns-earth-planet.properties b/build/resources/main/ns-earth-planet.properties new file mode 100644 index 0000000..fae2722 --- /dev/null +++ b/build/resources/main/ns-earth-planet.properties @@ -0,0 +1,13 @@ +# binding name +root_id=root-nameserver + +# registry host +registry.host=localhost + +# registry port +# TODO: REPLACE with real value such as 16509 - considering the port range associated with your account - you have received after Lab 0 a port range (beginning_of_the_range, end_of_the_range) +registry.port=port_range+9 + + +# managed domain +domain=earth.planet \ No newline at end of file diff --git a/build/resources/main/ns-planet.properties b/build/resources/main/ns-planet.properties new file mode 100644 index 0000000..bb5b73b --- /dev/null +++ b/build/resources/main/ns-planet.properties @@ -0,0 +1,13 @@ +# binding name +root_id=root-nameserver + +# registry host +registry.host=localhost + +# registry port +# TODO: REPLACE with real value such as 16509 - considering the port range associated with your account - you have received after Lab 0 a port range (beginning_of_the_range, end_of_the_range) +registry.port=port_range+9 + + +# managed domain +domain=planet diff --git a/build/resources/main/ns-root.properties b/build/resources/main/ns-root.properties new file mode 100644 index 0000000..c8ca59e --- /dev/null +++ b/build/resources/main/ns-root.properties @@ -0,0 +1,9 @@ +# binding name +root_id=root-nameserver + +# registry host +registry.host=localhost + +# registry port +# TODO: REPLACE with real value such as 16509 - considering the port range associated with your account - you have received after Lab 0 a port range (beginning_of_the_range, end_of_the_range) +registry.port=port_range+9 diff --git a/build/resources/main/ns-ze.properties b/build/resources/main/ns-ze.properties new file mode 100644 index 0000000..1dee980 --- /dev/null +++ b/build/resources/main/ns-ze.properties @@ -0,0 +1,13 @@ +# binding name +root_id=root-nameserver + +# registry host +registry.host=localhost + +# registry port +# TODO: REPLACE with real value such as 16509 - considering the port range associated with your account - you have received after Lab 0 a port range (beginning_of_the_range, end_of_the_range) +registry.port=port_range+9 + + +# managed domain +domain=ze \ No newline at end of file diff --git a/build/resources/main/transfer-1.properties b/build/resources/main/transfer-1.properties new file mode 100644 index 0000000..0b87450 --- /dev/null +++ b/build/resources/main/transfer-1.properties @@ -0,0 +1,20 @@ +# TCP port used for the DMTP server socket +# TODO: REPLACE with real value such as 16500 - considering the port range associated with your account - you have received after Lab 0 a port range (beginning_of_the_range, end_of_the_range) +tcp.port=port_range + +# UDP socket address of the monitoring server +monitoring.host=127.0.0.1 +# TODO: REPLACE with the real value of the monitoring server port +monitoring.port=port_range+8 + +# ============================================= Required for Assignment 2 + +# name of the root nameserver's remote object +root_id=root-nameserver + +# RMI registry host +registry.host=localhost + +# RMI registry port +# TODO: REPLACE with real value such as 16509 - considering the port range associated with your account - you have received after Lab 0 a port range (beginning_of_the_range, end_of_the_range) +registry.port=port_range+9 diff --git a/build/resources/main/transfer-2.properties b/build/resources/main/transfer-2.properties new file mode 100644 index 0000000..11757ab --- /dev/null +++ b/build/resources/main/transfer-2.properties @@ -0,0 +1,20 @@ +# TCP port used for the DMTP server socket +# TODO: REPLACE with real value such as 16501 - considering the port range associated with your account - you have received after Lab 0 a port range (beginning_of_the_range, end_of_the_range) +tcp.port=port_range+1 + +# UDP socket address of the monitoring server +monitoring.host=127.0.0.1 +# TODO: REPLACE with the real value of the monitoring server port +monitoring.port=port_range+8 + +# ============================================= Required for Assignment 2 + +# name of the root nameserver's remote object +root_id=root-nameserver + +# RMI registry host +registry.host=localhost + +# RMI registry port +# TODO: REPLACE with real value such as 16509 - considering the port range associated with your account - you have received after Lab 0 a port range (beginning_of_the_range, end_of_the_range) +registry.port=port_range+9 diff --git a/build/resources/main/users-earth-planet.properties b/build/resources/main/users-earth-planet.properties new file mode 100644 index 0000000..1faf335 --- /dev/null +++ b/build/resources/main/users-earth-planet.properties @@ -0,0 +1,3 @@ +# = +trillian=12345 +arthur=23456 diff --git a/build/resources/main/users-univer-ze.properties b/build/resources/main/users-univer-ze.properties new file mode 100644 index 0000000..ae3c292 --- /dev/null +++ b/build/resources/main/users-univer-ze.properties @@ -0,0 +1,2 @@ +# = +zaphod=12345 diff --git a/build/resources/test/.gitkeep b/build/resources/test/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/build/test-results/test/TEST-dslab.client.MessageClientMailboxTest.xml b/build/test-results/test/TEST-dslab.client.MessageClientMailboxTest.xml new file mode 100644 index 0000000..ca85dac --- /dev/null +++ b/build/test-results/test/TEST-dslab.client.MessageClientMailboxTest.xml @@ -0,0 +1,236 @@ + + + + + java.lang.NumberFormatException: For input string: "port_range+2" + at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) + at java.base/java.lang.Integer.parseInt(Integer.java:652) + at java.base/java.lang.Integer.parseInt(Integer.java:770) + at dslab.util.Config.getInt(Config.java:52) + at dslab.client.MessageClientMailboxTest.setUp(MessageClientMailboxTest.java:59) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) + at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24) + at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) + at org.junit.rules.Verifier$1.evaluate(Verifier.java:35) + at org.junit.rules.RunRules.evaluate(RunRules.java:20) + at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) + at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) + at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:110) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:38) + at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:62) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:119) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:414) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) + at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) + at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56) + at java.base/java.lang.Thread.run(Thread.java:834) + + java.lang.NullPointerException + at dslab.client.MessageClientMailboxTest.tearDown(MessageClientMailboxTest.java:74) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) + at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:33) + at org.junit.rules.Verifier$1.evaluate(Verifier.java:35) + at org.junit.rules.RunRules.evaluate(RunRules.java:20) + at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) + at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) + at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:110) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:38) + at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:62) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:119) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:414) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) + at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) + at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56) + at java.base/java.lang.Thread.run(Thread.java:834) + + + + java.lang.NumberFormatException: For input string: "port_range+2" + at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) + at java.base/java.lang.Integer.parseInt(Integer.java:652) + at java.base/java.lang.Integer.parseInt(Integer.java:770) + at dslab.util.Config.getInt(Config.java:52) + at dslab.client.MessageClientMailboxTest.setUp(MessageClientMailboxTest.java:59) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) + at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24) + at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) + at org.junit.rules.Verifier$1.evaluate(Verifier.java:35) + at org.junit.rules.RunRules.evaluate(RunRules.java:20) + at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) + at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) + at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:110) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:38) + at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:62) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:119) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:414) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) + at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) + at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56) + at java.base/java.lang.Thread.run(Thread.java:834) + + java.lang.NullPointerException + at dslab.client.MessageClientMailboxTest.tearDown(MessageClientMailboxTest.java:74) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) + at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:33) + at org.junit.rules.Verifier$1.evaluate(Verifier.java:35) + at org.junit.rules.RunRules.evaluate(RunRules.java:20) + at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) + at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) + at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:110) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:38) + at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:62) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:119) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:414) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) + at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) + at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56) + at java.base/java.lang.Thread.run(Thread.java:834) + + + + + diff --git a/build/test-results/test/TEST-dslab.client.MessageClientStartupTest.xml b/build/test-results/test/TEST-dslab.client.MessageClientStartupTest.xml new file mode 100644 index 0000000..4efd15f --- /dev/null +++ b/build/test-results/test/TEST-dslab.client.MessageClientStartupTest.xml @@ -0,0 +1,117 @@ + + + + + java.lang.NumberFormatException: For input string: "port_range+3" + at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) + at java.base/java.lang.Integer.parseInt(Integer.java:652) + at java.base/java.lang.Integer.parseInt(Integer.java:770) + at dslab.util.Config.getInt(Config.java:52) + at dslab.client.MessageClientStartupTest.setUp(MessageClientStartupTest.java:37) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) + at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24) + at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) + at org.junit.rules.Verifier$1.evaluate(Verifier.java:35) + at org.junit.rules.RunRules.evaluate(RunRules.java:20) + at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) + at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) + at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:110) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:38) + at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:62) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:119) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:414) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) + at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) + at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56) + at java.base/java.lang.Thread.run(Thread.java:834) + + java.lang.NullPointerException + at dslab.client.MessageClientStartupTest.tearDown(MessageClientStartupTest.java:48) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) + at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:33) + at org.junit.rules.Verifier$1.evaluate(Verifier.java:35) + at org.junit.rules.RunRules.evaluate(RunRules.java:20) + at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) + at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) + at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:110) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:38) + at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:62) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:119) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:414) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) + at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) + at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56) + at java.base/java.lang.Thread.run(Thread.java:834) + + + + + diff --git a/build/test-results/test/TEST-dslab.mailbox.MailboxServerProtocolTest.xml b/build/test-results/test/TEST-dslab.mailbox.MailboxServerProtocolTest.xml new file mode 100644 index 0000000..ccb00cb --- /dev/null +++ b/build/test-results/test/TEST-dslab.mailbox.MailboxServerProtocolTest.xml @@ -0,0 +1,98 @@ + + + + + java.lang.NumberFormatException: For input string: "port_range+3" + at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) + at java.base/java.lang.Integer.parseInt(Integer.java:652) + at java.base/java.lang.Integer.parseInt(Integer.java:770) + at dslab.util.Config.getInt(Config.java:52) + at dslab.mailbox.MailboxServerProtocolTest.setUp(MailboxServerProtocolTest.java:31) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) + at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24) + at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) + at org.junit.rules.Verifier$1.evaluate(Verifier.java:35) + at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298) + at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) + at java.base/java.lang.Thread.run(Thread.java:834) + + + + java.lang.NumberFormatException: For input string: "port_range+3" + at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) + at java.base/java.lang.Integer.parseInt(Integer.java:652) + at java.base/java.lang.Integer.parseInt(Integer.java:770) + at dslab.util.Config.getInt(Config.java:52) + at dslab.mailbox.MailboxServerProtocolTest.setUp(MailboxServerProtocolTest.java:31) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) + at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24) + at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) + at org.junit.rules.Verifier$1.evaluate(Verifier.java:35) + at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298) + at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) + at java.base/java.lang.Thread.run(Thread.java:834) + + + + java.lang.NumberFormatException: For input string: "port_range+3" + at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) + at java.base/java.lang.Integer.parseInt(Integer.java:652) + at java.base/java.lang.Integer.parseInt(Integer.java:770) + at dslab.util.Config.getInt(Config.java:52) + at dslab.mailbox.MailboxServerProtocolTest.setUp(MailboxServerProtocolTest.java:31) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) + at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24) + at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) + at org.junit.rules.Verifier$1.evaluate(Verifier.java:35) + at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298) + at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) + at java.base/java.lang.Thread.run(Thread.java:834) + + + + java.lang.NumberFormatException: For input string: "port_range+3" + at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) + at java.base/java.lang.Integer.parseInt(Integer.java:652) + at java.base/java.lang.Integer.parseInt(Integer.java:770) + at dslab.util.Config.getInt(Config.java:52) + at dslab.mailbox.MailboxServerProtocolTest.setUp(MailboxServerProtocolTest.java:31) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) + at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24) + at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) + at org.junit.rules.Verifier$1.evaluate(Verifier.java:35) + at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298) + at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) + at java.base/java.lang.Thread.run(Thread.java:834) + + + + + diff --git a/build/test-results/test/TEST-dslab.mailbox.MailboxServerTest.xml b/build/test-results/test/TEST-dslab.mailbox.MailboxServerTest.xml new file mode 100644 index 0000000..47993fd --- /dev/null +++ b/build/test-results/test/TEST-dslab.mailbox.MailboxServerTest.xml @@ -0,0 +1,29 @@ + + + + + java.lang.NumberFormatException: For input string: "port_range+2" + at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) + at java.base/java.lang.Integer.parseInt(Integer.java:652) + at java.base/java.lang.Integer.parseInt(Integer.java:770) + at dslab.util.Config.getInt(Config.java:52) + at dslab.mailbox.MailboxServerTest.runAndShutdownTransferServer_createsAndStopsTcpSocketCorrectly(MailboxServerTest.java:33) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) + at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) + at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) + at org.junit.rules.Verifier$1.evaluate(Verifier.java:35) + at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298) + at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) + at java.base/java.lang.Thread.run(Thread.java:834) + + + + + diff --git a/build/test-results/test/TEST-dslab.mailbox.MailboxStartsecureTest.xml b/build/test-results/test/TEST-dslab.mailbox.MailboxStartsecureTest.xml new file mode 100644 index 0000000..88afd87 --- /dev/null +++ b/build/test-results/test/TEST-dslab.mailbox.MailboxStartsecureTest.xml @@ -0,0 +1,29 @@ + + + + + java.lang.NumberFormatException: For input string: "port_range+3" + at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) + at java.base/java.lang.Integer.parseInt(Integer.java:652) + at java.base/java.lang.Integer.parseInt(Integer.java:770) + at dslab.util.Config.getInt(Config.java:52) + at dslab.mailbox.MailboxStartsecureTest.setUp(MailboxStartsecureTest.java:31) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) + at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24) + at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) + at org.junit.rules.Verifier$1.evaluate(Verifier.java:35) + at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298) + at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) + at java.base/java.lang.Thread.run(Thread.java:834) + + + + + diff --git a/build/test-results/test/TEST-dslab.monitoring.MonitoringServerProtocolTest.xml b/build/test-results/test/TEST-dslab.monitoring.MonitoringServerProtocolTest.xml new file mode 100644 index 0000000..9880941 --- /dev/null +++ b/build/test-results/test/TEST-dslab.monitoring.MonitoringServerProtocolTest.xml @@ -0,0 +1,52 @@ + + + + + java.lang.NumberFormatException: For input string: "port_range+8" + at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) + at java.base/java.lang.Integer.parseInt(Integer.java:652) + at java.base/java.lang.Integer.parseInt(Integer.java:770) + at dslab.util.Config.getInt(Config.java:52) + at dslab.monitoring.MonitoringServerProtocolTest.setUp(MonitoringServerProtocolTest.java:36) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) + at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24) + at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) + at org.junit.rules.Verifier$1.evaluate(Verifier.java:35) + at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298) + at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) + at java.base/java.lang.Thread.run(Thread.java:834) + + + + java.lang.NumberFormatException: For input string: "port_range+8" + at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) + at java.base/java.lang.Integer.parseInt(Integer.java:652) + at java.base/java.lang.Integer.parseInt(Integer.java:770) + at dslab.util.Config.getInt(Config.java:52) + at dslab.monitoring.MonitoringServerProtocolTest.setUp(MonitoringServerProtocolTest.java:36) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) + at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24) + at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) + at org.junit.rules.Verifier$1.evaluate(Verifier.java:35) + at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298) + at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) + at java.base/java.lang.Thread.run(Thread.java:834) + + + + + diff --git a/build/test-results/test/TEST-dslab.monitoring.MonitoringServerTest.xml b/build/test-results/test/TEST-dslab.monitoring.MonitoringServerTest.xml new file mode 100644 index 0000000..abf1198 --- /dev/null +++ b/build/test-results/test/TEST-dslab.monitoring.MonitoringServerTest.xml @@ -0,0 +1,29 @@ + + + + + java.lang.NumberFormatException: For input string: "port_range+8" + at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) + at java.base/java.lang.Integer.parseInt(Integer.java:652) + at java.base/java.lang.Integer.parseInt(Integer.java:770) + at dslab.util.Config.getInt(Config.java:52) + at dslab.monitoring.MonitoringServerTest.runAndShutdownMonitoringServer_createsAndStopsUdpSocketCorrectly(MonitoringServerTest.java:27) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) + at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) + at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) + at org.junit.rules.Verifier$1.evaluate(Verifier.java:35) + at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298) + at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) + at java.base/java.lang.Thread.run(Thread.java:834) + + + + + diff --git a/build/test-results/test/TEST-dslab.naming.NameserverTest.xml b/build/test-results/test/TEST-dslab.naming.NameserverTest.xml new file mode 100644 index 0000000..be4f811 --- /dev/null +++ b/build/test-results/test/TEST-dslab.naming.NameserverTest.xml @@ -0,0 +1,114 @@ + + + + + java.lang.NumberFormatException: For input string: "port_range+9" + at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) + at java.base/java.lang.Integer.parseInt(Integer.java:652) + at java.base/java.lang.Integer.parseInt(Integer.java:770) + at dslab.util.Config.getInt(Config.java:52) + at dslab.naming.NameserverTest.ns01_startAndShutdownRootNameserver_createsAndUnexportsRegistryCorrectly(NameserverTest.java:78) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) + at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) + at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298) + at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) + at java.base/java.lang.Thread.run(Thread.java:834) + + + + java.lang.NumberFormatException: For input string: "port_range+9" + at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) + at java.base/java.lang.Integer.parseInt(Integer.java:652) + at java.base/java.lang.Integer.parseInt(Integer.java:770) + at dslab.util.Config.getInt(Config.java:52) + at dslab.naming.NameserverTest.ns02_startRootNameserver_registersRemoteObjectCorrectly(NameserverTest.java:109) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) + at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) + at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298) + at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) + at java.base/java.lang.Thread.run(Thread.java:834) + + + + java.lang.NumberFormatException: For input string: "port_range+9" + at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) + at java.base/java.lang.Integer.parseInt(Integer.java:652) + at java.base/java.lang.Integer.parseInt(Integer.java:770) + at dslab.util.Config.getInt(Config.java:52) + at dslab.naming.NameserverTest.ns03_startingZoneNameserver_registersNameserverCorrectly(NameserverTest.java:141) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) + at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) + at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298) + at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) + at java.base/java.lang.Thread.run(Thread.java:834) + + + + java.lang.NumberFormatException: For input string: "port_range+9" + at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) + at java.base/java.lang.Integer.parseInt(Integer.java:652) + at java.base/java.lang.Integer.parseInt(Integer.java:770) + at dslab.util.Config.getInt(Config.java:52) + at dslab.naming.NameserverTest.ns04_registerAndLookupMailboxServer_registersAndReturnsAddressCorrectly(NameserverTest.java:185) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) + at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) + at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298) + at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) + at java.base/java.lang.Thread.run(Thread.java:834) + + + + + diff --git a/build/test-results/test/TEST-dslab.transfer.TransferServerProtocolTest.xml b/build/test-results/test/TEST-dslab.transfer.TransferServerProtocolTest.xml new file mode 100644 index 0000000..317aee5 --- /dev/null +++ b/build/test-results/test/TEST-dslab.transfer.TransferServerProtocolTest.xml @@ -0,0 +1,52 @@ + + + + + java.lang.NumberFormatException: For input string: "port_range" + at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) + at java.base/java.lang.Integer.parseInt(Integer.java:652) + at java.base/java.lang.Integer.parseInt(Integer.java:770) + at dslab.util.Config.getInt(Config.java:52) + at dslab.transfer.TransferServerProtocolTest.setUp(TransferServerProtocolTest.java:31) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) + at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24) + at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) + at org.junit.rules.Verifier$1.evaluate(Verifier.java:35) + at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298) + at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) + at java.base/java.lang.Thread.run(Thread.java:834) + + + + java.lang.NumberFormatException: For input string: "port_range" + at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) + at java.base/java.lang.Integer.parseInt(Integer.java:652) + at java.base/java.lang.Integer.parseInt(Integer.java:770) + at dslab.util.Config.getInt(Config.java:52) + at dslab.transfer.TransferServerProtocolTest.setUp(TransferServerProtocolTest.java:31) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) + at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24) + at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) + at org.junit.rules.Verifier$1.evaluate(Verifier.java:35) + at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298) + at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) + at java.base/java.lang.Thread.run(Thread.java:834) + + + + + diff --git a/build/test-results/test/TEST-dslab.transfer.TransferServerTest.xml b/build/test-results/test/TEST-dslab.transfer.TransferServerTest.xml new file mode 100644 index 0000000..89b3e5f --- /dev/null +++ b/build/test-results/test/TEST-dslab.transfer.TransferServerTest.xml @@ -0,0 +1,29 @@ + + + + + java.lang.NumberFormatException: For input string: "port_range" + at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) + at java.base/java.lang.Integer.parseInt(Integer.java:652) + at java.base/java.lang.Integer.parseInt(Integer.java:770) + at dslab.util.Config.getInt(Config.java:52) + at dslab.transfer.TransferServerTest.runAndShutdownTransferServer_createsAndStopsTcpSocketCorrectly(TransferServerTest.java:30) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) + at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) + at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) + at org.junit.rules.Verifier$1.evaluate(Verifier.java:35) + at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298) + at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) + at java.base/java.lang.Thread.run(Thread.java:834) + + + + + diff --git a/build/test-results/test/binary/output.bin b/build/test-results/test/binary/output.bin new file mode 100644 index 0000000..27ec9b4 Binary files /dev/null and b/build/test-results/test/binary/output.bin differ diff --git a/build/test-results/test/binary/output.bin.idx b/build/test-results/test/binary/output.bin.idx new file mode 100644 index 0000000..76f18bb Binary files /dev/null and b/build/test-results/test/binary/output.bin.idx differ diff --git a/build/test-results/test/binary/results.bin b/build/test-results/test/binary/results.bin new file mode 100644 index 0000000..a918611 Binary files /dev/null and b/build/test-results/test/binary/results.bin differ diff --git a/build/tmp/compileJava/source-classes-mapping.txt b/build/tmp/compileJava/source-classes-mapping.txt new file mode 100644 index 0000000..f338913 --- /dev/null +++ b/build/tmp/compileJava/source-classes-mapping.txt @@ -0,0 +1,32 @@ +dslab/nameserver/Nameserver.java + dslab.nameserver.Nameserver +dslab/monitoring/MonitoringServer.java + dslab.monitoring.MonitoringServer +dslab/ComponentFactory.java + dslab.ComponentFactory +dslab/util/Keys.java + dslab.util.Keys +dslab/mailbox/IMailboxServer.java + dslab.mailbox.IMailboxServer +dslab/nameserver/INameserverRemote.java + dslab.nameserver.INameserverRemote +dslab/monitoring/IMonitoringServer.java + dslab.monitoring.IMonitoringServer +dslab/nameserver/InvalidDomainException.java + dslab.nameserver.InvalidDomainException +dslab/transfer/TransferServer.java + dslab.transfer.TransferServer +dslab/util/Config.java + dslab.util.Config +dslab/transfer/ITransferServer.java + dslab.transfer.ITransferServer +dslab/nameserver/AlreadyRegisteredException.java + dslab.nameserver.AlreadyRegisteredException +dslab/client/MessageClient.java + dslab.client.MessageClient +dslab/client/IMessageClient.java + dslab.client.IMessageClient +dslab/nameserver/INameserver.java + dslab.nameserver.INameserver +dslab/mailbox/MailboxServer.java + dslab.mailbox.MailboxServer diff --git a/build/tmp/compileTestJava/source-classes-mapping.txt b/build/tmp/compileTestJava/source-classes-mapping.txt new file mode 100644 index 0000000..a51041b --- /dev/null +++ b/build/tmp/compileTestJava/source-classes-mapping.txt @@ -0,0 +1,42 @@ +dslab/StreamListener.java + dslab.StreamListener +dslab/CheckedConsumer.java + dslab.CheckedConsumer +dslab/Constants.java + dslab.Constants +dslab/client/MessageClientMailboxTest.java + dslab.client.MessageClientMailboxTest +dslab/TestInputStream.java + dslab.TestInputStream +dslab/StringMatches.java + dslab.StringMatches +dslab/transfer/TransferServerProtocolTest.java + dslab.transfer.TransferServerProtocolTest +dslab/mailbox/MailboxServerTest.java + dslab.mailbox.MailboxServerTest +dslab/Sockets.java + dslab.Sockets +dslab/mailbox/MailboxStartsecureTest.java + dslab.mailbox.MailboxStartsecureTest +dslab/client/MessageClientStartupTest.java + dslab.client.MessageClientStartupTest +dslab/JunitSocketClient.java + dslab.JunitSocketClient +dslab/TestBase.java + dslab.TestBase +dslab/TestOutputStream.java + dslab.TestOutputStream +dslab/monitoring/MonitoringServerTest.java + dslab.monitoring.MonitoringServerTest +dslab/SimpleTcpServer.java + dslab.SimpleTcpServer +dslab/mailbox/MailboxServerProtocolTest.java + dslab.mailbox.MailboxServerProtocolTest +dslab/transfer/TransferServerTest.java + dslab.transfer.TransferServerTest +dslab/monitoring/MonitoringServerProtocolTest.java + dslab.monitoring.MonitoringServerProtocolTest +dslab/naming/NameserverTest.java + dslab.naming.NameserverTest +dslab/NullOutputStream.java + dslab.NullOutputStream diff --git a/build/tmp/jar/MANIFEST.MF b/build/tmp/jar/MANIFEST.MF new file mode 100644 index 0000000..58630c0 --- /dev/null +++ b/build/tmp/jar/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/build/tmp/test/jar_extract_15954327308975353693_tmp b/build/tmp/test/jar_extract_15954327308975353693_tmp new file mode 100644 index 0000000..ca7fba7 Binary files /dev/null and b/build/tmp/test/jar_extract_15954327308975353693_tmp differ diff --git a/build/tmp/test/jar_extract_16062046450479446186_tmp b/build/tmp/test/jar_extract_16062046450479446186_tmp new file mode 100644 index 0000000..e69de29 diff --git a/build/tmp/test/jar_extract_3595125514180716238_tmp b/build/tmp/test/jar_extract_3595125514180716238_tmp new file mode 100644 index 0000000..e69de29 diff --git a/build/tmp/test/jar_extract_4501940430545839015_tmp b/build/tmp/test/jar_extract_4501940430545839015_tmp new file mode 100644 index 0000000..30d4b00 Binary files /dev/null and b/build/tmp/test/jar_extract_4501940430545839015_tmp differ diff --git a/build/tmp/test/jar_extract_4606562655791095835_tmp b/build/tmp/test/jar_extract_4606562655791095835_tmp new file mode 100644 index 0000000..e69de29 diff --git a/build/tmp/test/jar_extract_6816970886763953206_tmp b/build/tmp/test/jar_extract_6816970886763953206_tmp new file mode 100644 index 0000000..6881f81 Binary files /dev/null and b/build/tmp/test/jar_extract_6816970886763953206_tmp differ diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..e708b1c Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..12d38de --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.6.1-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100755 index 0000000..4f906e0 --- /dev/null +++ b/gradlew @@ -0,0 +1,185 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# 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 +# +# https://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. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..ac1b06f --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/keys/client/mailbox-earth-planet_pub.der b/keys/client/mailbox-earth-planet_pub.der new file mode 100644 index 0000000..5e8cbc4 Binary files /dev/null and b/keys/client/mailbox-earth-planet_pub.der differ diff --git a/keys/client/mailbox-univer-ze_pub.der b/keys/client/mailbox-univer-ze_pub.der new file mode 100644 index 0000000..a0f9150 Binary files /dev/null and b/keys/client/mailbox-univer-ze_pub.der differ diff --git a/keys/client/transfer-1_pub.der b/keys/client/transfer-1_pub.der new file mode 100644 index 0000000..6dc5226 Binary files /dev/null and b/keys/client/transfer-1_pub.der differ diff --git a/keys/client/transfer-2_pub.der b/keys/client/transfer-2_pub.der new file mode 100644 index 0000000..c103005 Binary files /dev/null and b/keys/client/transfer-2_pub.der differ diff --git a/keys/hmac.key b/keys/hmac.key new file mode 100644 index 0000000..c2def2f --- /dev/null +++ b/keys/hmac.key @@ -0,0 +1 @@ +6699d15d571d71185cb7def2e64db8b9395bdb33b8c351bfe52140eb01e13752e9e46b1634fa62deec93883b933a3dc7f4c7256792aa6193104f7dec331ac021098ba988aea395501932f5b00ffc8dcd89e42739c8cb79a51377d0b9a6d666d7345b8143d11563fbbb730769f7e9845a5ad49fc8144aa4d7d082100ee44c0a975be3aebd4a41a4cdfb4ab2076f00319b30027b51cc5ee06e8efd2e4efaec68155d4d7059a5b7c96503956e782b02e62751f82ba7773cdc411a23db97a549b97846aa59add0fba127b0f4334c9278d469b5226d03a47731663d50ad5a4a272987eee78330b4aca24c07e2c307cc5e6443ff74da08df16217f284b1db6e0e56677b0a1fb9c8d719b87c2a1f6bc875add901de2cac2ef3388e0628fc3a504373007a52a873a0c4b0531a98a69c882c4463181c89adf8c2c529ee09b36485c29854dd2b9b7c63e69bf0f80213ae0860050392100bcd7060855a6895cdd5bc0ba6b3bdbabbb77e7063a9a165b36a0cf4f1e2cefa37678f2d2e6653c634f755a4b13a1ab7fd06f83a2f32f6ee5368e2d7606a85a0e51ceb99ca1805e3e33dabb30bacea9985e54b926888791b9b84162dd097545dba294a797f5bd3f24d59409bd5ae668b6b62faca5e417beaca15b573627ebc41fda5e417d2640140f45b5761c5b934f629e539b2d83eee9c92509702e228205699f49cf0a512898b7fade9778ab58 \ No newline at end of file diff --git a/keys/server/mailbox-earth-planet.der b/keys/server/mailbox-earth-planet.der new file mode 100644 index 0000000..5259092 Binary files /dev/null and b/keys/server/mailbox-earth-planet.der differ diff --git a/keys/server/mailbox-univer-ze.der b/keys/server/mailbox-univer-ze.der new file mode 100644 index 0000000..6fb7e98 Binary files /dev/null and b/keys/server/mailbox-univer-ze.der differ diff --git a/keys/server/transfer-1.der b/keys/server/transfer-1.der new file mode 100644 index 0000000..f154f80 Binary files /dev/null and b/keys/server/transfer-1.der differ diff --git a/keys/server/transfer-2.der b/keys/server/transfer-2.der new file mode 100644 index 0000000..8b67573 Binary files /dev/null and b/keys/server/transfer-2.der differ diff --git a/keys/wrongHmac.key b/keys/wrongHmac.key new file mode 100644 index 0000000..32ab311 --- /dev/null +++ b/keys/wrongHmac.key @@ -0,0 +1 @@ +9966d15d571d71185cb7def2e64db8b9395bdb33b8c351bfe52140eb01e13752e9e46b1634fa62deec93883b933a3dc7f4c7256792aa6193104f7dec331ac021098ba988aea395501932f5b00ffc8dcd89e42739c8cb79a51377d0b9a6d666d7345b8143d11563fbbb730769f7e9845a5ad49fc8144aa4d7d082100ee44c0a975be3aebd4a41a4cdfb4ab2076f00319b30027b51cc5ee06e8efd2e4efaec68155d4d7059a5b7c96503956e782b02e62751f82ba7773cdc411a23db97a549b97846aa59add0fba127b0f4334c9278d469b5226d03a47731663d50ad5a4a272987eee78330b4aca24c07e2c307cc5e6443ff74da08df16217f284b1db6e0e56677b0a1fb9c8d719b87c2a1f6bc875add901de2cac2ef3388e0628fc3a504373007a52a873a0c4b0531a98a69c882c4463181c89adf8c2c529ee09b36485c29854dd2b9b7c63e69bf0f80213ae0860050392100bcd7060855a6895cdd5bc0ba6b3bdbabbb77e7063a9a165b36a0cf4f1e2cefa37678f2d2e6653c634f755a4b13a1ab7fd06f83a2f32f6ee5368e2d7606a85a0e51ceb99ca1805e3e33dabb30bacea9985e54b926888791b9b84162dd097545dba294a797f5bd3f24d59409bd5ae668b6b62faca5e417beaca15b573627ebc41fda5e417d2640140f45b5761c5b934f629e539b2d83eee9c92509702e228205699f49cf0a512898b7fade9778ab58 diff --git a/lib/commons-logging-1.2.jar b/lib/commons-logging-1.2.jar new file mode 100644 index 0000000..93a3b9f Binary files /dev/null and b/lib/commons-logging-1.2.jar differ diff --git a/lib/hamcrest-core-1.3.jar b/lib/hamcrest-core-1.3.jar new file mode 100644 index 0000000..9d5fe16 Binary files /dev/null and b/lib/hamcrest-core-1.3.jar differ diff --git a/lib/junit-4.12.jar b/lib/junit-4.12.jar new file mode 100644 index 0000000..3a7fc26 Binary files /dev/null and b/lib/junit-4.12.jar differ diff --git a/lib/orvell-core-0.2.0.jar b/lib/orvell-core-0.2.0.jar new file mode 100644 index 0000000..72a3aae Binary files /dev/null and b/lib/orvell-core-0.2.0.jar differ diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..64fca9d --- /dev/null +++ b/settings.gradle @@ -0,0 +1,5 @@ +/* + * This file was generated by the Gradle 'init' task. + */ + +rootProject.name = 'dslab20' diff --git a/src/main/java/dslab/ComponentFactory.java b/src/main/java/dslab/ComponentFactory.java new file mode 100644 index 0000000..a3a5c87 --- /dev/null +++ b/src/main/java/dslab/ComponentFactory.java @@ -0,0 +1,120 @@ +package dslab; + +import java.io.InputStream; +import java.io.PrintStream; + +import dslab.client.IMessageClient; +import dslab.client.MessageClient; +import dslab.mailbox.IMailboxServer; +import dslab.mailbox.MailboxServer; +import dslab.monitoring.IMonitoringServer; +import dslab.monitoring.MonitoringServer; +import dslab.nameserver.INameserver; +import dslab.nameserver.Nameserver; +import dslab.transfer.ITransferServer; +import dslab.transfer.TransferServer; +import dslab.util.Config; + +/** + * The component factory provides methods to create the core components of the application. You can edit the method body + * if the component instantiation requires additional logic. + * + * Do not change the existing method signatures! + */ +public final class ComponentFactory { + + private ComponentFactory() { + // static utility class + } + + /** + * Creates a new {@link IMonitoringServer} instance. + * + * @param componentId the component id + * @param in the input stream used for accepting cli commands + * @param out the output stream to print to + * @return a new MonitoringServer instance + */ + public static IMonitoringServer createMonitoringServer(String componentId, InputStream in, PrintStream out) + throws Exception { + /* + * TODO: Here you can modify the code (if necessary) to instantiate your components + */ + + Config config = new Config(componentId); + return new MonitoringServer(componentId, config, in, out); + } + + /** + * Creates a new {@link IMailboxServer} instance. + * + * @param componentId the component id + * @param in the input stream used for accepting cli commands + * @param out the output stream to print to + * @return a new MailboxServer instance + */ + public static IMailboxServer createMailboxServer(String componentId, InputStream in, PrintStream out) + throws Exception { + /* + * TODO: Here you can modify the code (if necessary) to instantiate your components + */ + + Config config = new Config(componentId); + return new MailboxServer(componentId, config, in, out); + } + + /** + * Creates a new {@link ITransferServer} instance. + * + * @param componentId the component id + * @param in the input stream used for accepting cli commands + * @param out the output stream to print to + * @return a new TransferServer instance + */ + public static ITransferServer createTransferServer(String componentId, InputStream in, PrintStream out) + throws Exception { + /* + * TODO: Here you can modify the code (if necessary) to instantiate your components + */ + + Config config = new Config(componentId); + return new TransferServer(componentId, config, in, out); + } + + /** + * Creates a new {@link INameserver} instance. + * + * @param componentId the component id + * @param in the input stream used for accepting cli commands + * @param out the output stream to print to + * @return a new Nameserver instance + */ + public static INameserver createNameserver(String componentId, InputStream in, PrintStream out) + throws Exception { + /* + * TODO: Here you can modify the code (if necessary) to instantiate your components + */ + + Config config = new Config(componentId); + return new Nameserver(componentId, config, in, out); + } + + /** + * Creates a new {@link IMessageClient} instance. + * + * @param componentId the component id + * @param in the input stream used for accepting cli commands + * @param out the output stream to print to + * @return a new MessageClient instance + */ + public static IMessageClient createMessageClient(String componentId, InputStream in, PrintStream out) + throws Exception { + /* + * TODO: Here you can modify the code (if necessary) to instantiate your components + */ + + Config config = new Config(componentId); + return new MessageClient(componentId, config, in, out); + } + +} diff --git a/src/main/java/dslab/client/IMessageClient.java b/src/main/java/dslab/client/IMessageClient.java new file mode 100644 index 0000000..a7d0397 --- /dev/null +++ b/src/main/java/dslab/client/IMessageClient.java @@ -0,0 +1,50 @@ +package dslab.client; + +/** + * A Message Client application. + * + * Do not change the existing method signatures! + */ +public interface IMessageClient extends Runnable { + + /** + * Starts the message client. + */ + @Override + void run(); + + /** + * Outputs the contents of the user's inbox on the shell. + */ + void inbox(); + + /** + * Deletes the mail with the given id. Prints 'ok' if the mail was deleted successfully, 'error {explanation}' + * otherwise. + * + * @param id the mail id + */ + void delete(String id); + + /** + * Verifies the signature of the message by calculating its hash value using the shared secret. Prints 'ok' if the + * message integrity was successfully verified, or 'error' otherwise. + * + * @param id the message id + */ + void verify(String id); + + /** + * Sends a message from the mail client's user to the given recipient(s) + * + * @param to comma separated list of recipients + * @param subject the message subject + * @param data the message data + */ + void msg(String to, String subject, String data); + + /** + * Shuts down the application. + */ + void shutdown(); +} diff --git a/src/main/java/dslab/client/MessageClient.java b/src/main/java/dslab/client/MessageClient.java new file mode 100644 index 0000000..87b8201 --- /dev/null +++ b/src/main/java/dslab/client/MessageClient.java @@ -0,0 +1,57 @@ +package dslab.client; + +import java.io.InputStream; +import java.io.PrintStream; + +import dslab.ComponentFactory; +import dslab.util.Config; + +public class MessageClient implements IMessageClient, Runnable { + + /** + * Creates a new client instance. + * + * @param componentId the id of the component that corresponds to the Config resource + * @param config the component config + * @param in the input stream to read console input from + * @param out the output stream to write console output to + */ + public MessageClient(String componentId, Config config, InputStream in, PrintStream out) { + + } + + @Override + public void run() { + + } + + @Override + public void inbox() { + + } + + @Override + public void delete(String id) { + + } + + @Override + public void verify(String id) { + + } + + @Override + public void msg(String to, String subject, String data) { + + } + + @Override + public void shutdown() { + + } + + public static void main(String[] args) throws Exception { + IMessageClient client = ComponentFactory.createMessageClient(args[0], System.in, System.out); + client.run(); + } +} diff --git a/src/main/java/dslab/mailbox/IMailboxServer.java b/src/main/java/dslab/mailbox/IMailboxServer.java new file mode 100644 index 0000000..07d745f --- /dev/null +++ b/src/main/java/dslab/mailbox/IMailboxServer.java @@ -0,0 +1,23 @@ +package dslab.mailbox; + +/** + * The mailbox server receives mails via DMTP from transfer servers, and makes them available to users via the DMAP + * protocol. + * + * Do not change the existing method signatures! + */ +public interface IMailboxServer extends Runnable { + + /** + * Starts the server. + */ + @Override + void run(); + + /** + * CLI command to shut down the server. After this method, all resources should be closed, and the application + * should terminate. + */ + void shutdown(); + +} diff --git a/src/main/java/dslab/mailbox/MailboxServer.java b/src/main/java/dslab/mailbox/MailboxServer.java new file mode 100644 index 0000000..f422eda --- /dev/null +++ b/src/main/java/dslab/mailbox/MailboxServer.java @@ -0,0 +1,37 @@ +package dslab.mailbox; + +import java.io.InputStream; +import java.io.PrintStream; + +import dslab.ComponentFactory; +import dslab.util.Config; + +public class MailboxServer implements IMailboxServer, Runnable { + + /** + * Creates a new server instance. + * + * @param componentId the id of the component that corresponds to the Config resource + * @param config the component config + * @param in the input stream to read console input from + * @param out the output stream to write console output to + */ + public MailboxServer(String componentId, Config config, InputStream in, PrintStream out) { + // TODO + } + + @Override + public void run() { + // TODO + } + + @Override + public void shutdown() { + // TODO + } + + public static void main(String[] args) throws Exception { + IMailboxServer server = ComponentFactory.createMailboxServer(args[0], System.in, System.out); + server.run(); + } +} diff --git a/src/main/java/dslab/monitoring/IMonitoringServer.java b/src/main/java/dslab/monitoring/IMonitoringServer.java new file mode 100644 index 0000000..99c0ea6 --- /dev/null +++ b/src/main/java/dslab/monitoring/IMonitoringServer.java @@ -0,0 +1,33 @@ +package dslab.monitoring; + +/** + * The monitoring service accepts incoming monitoring packets via UDP. It provides CLI commands to access the + * information. + * + * Do not change the existing method signatures! + */ +public interface IMonitoringServer extends Runnable { + + /** + * Starts the server. + */ + @Override + void run(); + + /** + * CLI command to shut down the server. After this method, all resources should be closed, and the application + * should terminate. + */ + void shutdown(); + + /** + * CLI command to report usage statistics for transfer servers. + */ + void servers(); + + /** + * CLI command to report usage statistics for individual senders. + */ + void addresses(); + +} diff --git a/src/main/java/dslab/monitoring/MonitoringServer.java b/src/main/java/dslab/monitoring/MonitoringServer.java new file mode 100644 index 0000000..12bba90 --- /dev/null +++ b/src/main/java/dslab/monitoring/MonitoringServer.java @@ -0,0 +1,48 @@ +package dslab.monitoring; + +import java.io.InputStream; +import java.io.PrintStream; + +import dslab.ComponentFactory; +import dslab.util.Config; + +public class MonitoringServer implements IMonitoringServer { + + /** + * Creates a new server instance. + * + * @param componentId the id of the component that corresponds to the Config resource + * @param config the component config + * @param in the input stream to read console input from + * @param out the output stream to write console output to + */ + public MonitoringServer(String componentId, Config config, InputStream in, PrintStream out) { + // TODO + } + + @Override + public void run() { + // TODO + } + + @Override + public void addresses() { + // TODO + } + + @Override + public void servers() { + // TODO + } + + @Override + public void shutdown() { + // TODO + } + + public static void main(String[] args) throws Exception { + IMonitoringServer server = ComponentFactory.createMonitoringServer(args[0], System.in, System.out); + server.run(); + } + +} diff --git a/src/main/java/dslab/nameserver/AlreadyRegisteredException.java b/src/main/java/dslab/nameserver/AlreadyRegisteredException.java new file mode 100644 index 0000000..555b67f --- /dev/null +++ b/src/main/java/dslab/nameserver/AlreadyRegisteredException.java @@ -0,0 +1,13 @@ +package dslab.nameserver; + +public class AlreadyRegisteredException extends Exception { + private static final long serialVersionUID = 1L; + + public AlreadyRegisteredException(String message, Throwable cause) { + super(message, cause); + } + + public AlreadyRegisteredException(String message) { + super(message); + } +} diff --git a/src/main/java/dslab/nameserver/INameserver.java b/src/main/java/dslab/nameserver/INameserver.java new file mode 100644 index 0000000..1468fc4 --- /dev/null +++ b/src/main/java/dslab/nameserver/INameserver.java @@ -0,0 +1,33 @@ +package dslab.nameserver; + +/** + * A Nameserver application. + * + * Do not change the existing method signatures! + */ +public interface INameserver extends Runnable { + + /** + * Starts the server. + */ + @Override + void run(); + + /** + * CLI command to report information about each known nameserver (zones) from the perspective of this nameserver. + */ + void nameservers(); + + /** + * CLI command to report information about the handled mailbox servers, containing mail domain and address + * (IP:port). + */ + void addresses(); + + /** + * CLI command to shut down the server. After this method, all resources should be closed, and the application + * should terminate. + */ + void shutdown(); + +} diff --git a/src/main/java/dslab/nameserver/INameserverRemote.java b/src/main/java/dslab/nameserver/INameserverRemote.java new file mode 100644 index 0000000..c111994 --- /dev/null +++ b/src/main/java/dslab/nameserver/INameserverRemote.java @@ -0,0 +1,59 @@ +package dslab.nameserver; + +import java.rmi.Remote; +import java.rmi.RemoteException; + +/** + * The remote object of a nameserver which can be called via RMI. + */ +public interface INameserverRemote extends Remote { + + /** + * Registers a mailbox server with the given address for the given domain. For example, when registering a + * nameserver for the domain 'earth.planet', the new nameserver first calls the root nameserver with the argument + * 'earth.planet'. The root nameserver locates the nameserver for 'planet' via its child-nameserver references, and + * invokes this method with the remainder of the domain (i.e., 'earth'). Because 'earth' is then the leaf zone, the + * current nameserver ('planet') stores the reference in its child-nameserver references. + * + * @param domain the domain + * @param nameserver the nameserver's remote object + * @throws RemoteException RMI exception (declaration required by RMI) + * @throws AlreadyRegisteredException if the given domain is already registered + * @throws InvalidDomainException if the domain is invalid (e.g., due to a syntax error, or a required intermediary + * nameserver was not found) + */ + void registerNameserver(String domain, INameserverRemote nameserver) throws RemoteException, + AlreadyRegisteredException, InvalidDomainException; + + /** + * Registers a mailbox server with the given address for the given domain. + * + * @param domain the mail domain, e.g. vienna.earth.planet + * @param address the socket address of the mailbox server's DMTP socket, e.g., 127.0.0.1:16503 + * @throws RemoteException RMI exception (declaration required by RMI) + * @throws AlreadyRegisteredException if the given domain is already in use + * @throws InvalidDomainException if the domain is invalid (e.g., due to a syntax error, or the responsible + * nameserver was not found) + */ + void registerMailboxServer(String domain, String address) throws RemoteException, AlreadyRegisteredException, + InvalidDomainException; + + /** + * Returns a reference to the remote object of the ns for the given zone. For example, if called with the argument + * 'earth' on the remote object of zone 'planet', the call returns the reference to the nameserver of the zone + * 'earth.planet'. + * + * @param zone the child zone, e.g. earth + * @return the remote object reference of the given zone, or null if it does not exist + * @throws RemoteException RMI exception (declaration required by RMI) + */ + INameserverRemote getNameserver(String zone) throws RemoteException; + + /** + * @param username + * @return + * @throws RemoteException + */ + String lookup(String username) throws RemoteException; + +} diff --git a/src/main/java/dslab/nameserver/InvalidDomainException.java b/src/main/java/dslab/nameserver/InvalidDomainException.java new file mode 100644 index 0000000..306cafa --- /dev/null +++ b/src/main/java/dslab/nameserver/InvalidDomainException.java @@ -0,0 +1,13 @@ +package dslab.nameserver; + +public class InvalidDomainException extends Exception { + private static final long serialVersionUID = 1L; + + public InvalidDomainException(String message) { + super(message); + } + + public InvalidDomainException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/src/main/java/dslab/nameserver/Nameserver.java b/src/main/java/dslab/nameserver/Nameserver.java new file mode 100644 index 0000000..81171a3 --- /dev/null +++ b/src/main/java/dslab/nameserver/Nameserver.java @@ -0,0 +1,48 @@ +package dslab.nameserver; + +import java.io.InputStream; +import java.io.PrintStream; + +import dslab.ComponentFactory; +import dslab.util.Config; + +public class Nameserver implements INameserver { + + /** + * Creates a new server instance. + * + * @param componentId the id of the component that corresponds to the Config resource + * @param config the component config + * @param in the input stream to read console input from + * @param out the output stream to write console output to + */ + public Nameserver(String componentId, Config config, InputStream in, PrintStream out) { + // TODO + } + + @Override + public void run() { + // TODO + } + + @Override + public void nameservers() { + // TODO + } + + @Override + public void addresses() { + // TODO + } + + @Override + public void shutdown() { + // TODO + } + + public static void main(String[] args) throws Exception { + INameserver component = ComponentFactory.createNameserver(args[0], System.in, System.out); + component.run(); + } + +} diff --git a/src/main/java/dslab/transfer/ITransferServer.java b/src/main/java/dslab/transfer/ITransferServer.java new file mode 100644 index 0000000..b6961d7 --- /dev/null +++ b/src/main/java/dslab/transfer/ITransferServer.java @@ -0,0 +1,22 @@ +package dslab.transfer; + +/** + * The transfer server is responsible for accepting mails sent by users, and forward them to mailbox servers via DMTP. + * It also reports usage statistics to the monitoring server. + * + * Do not change the existing method signatures! + */ +public interface ITransferServer extends Runnable { + + /** + * Starts the server. + */ + @Override + void run(); + + /** + * CLI command to shut down the server. After this method, all resources should be closed, and the application + * should terminate. + */ + void shutdown(); +} diff --git a/src/main/java/dslab/transfer/TransferServer.java b/src/main/java/dslab/transfer/TransferServer.java new file mode 100644 index 0000000..e4e9c89 --- /dev/null +++ b/src/main/java/dslab/transfer/TransferServer.java @@ -0,0 +1,38 @@ +package dslab.transfer; + +import java.io.InputStream; +import java.io.PrintStream; + +import dslab.ComponentFactory; +import dslab.util.Config; + +public class TransferServer implements ITransferServer, Runnable { + + /** + * Creates a new server instance. + * + * @param componentId the id of the component that corresponds to the Config resource + * @param config the component config + * @param in the input stream to read console input from + * @param out the output stream to write console output to + */ + public TransferServer(String componentId, Config config, InputStream in, PrintStream out) { + // TODO + } + + @Override + public void run() { + // TODO + } + + @Override + public void shutdown() { + // TODO + } + + public static void main(String[] args) throws Exception { + ITransferServer server = ComponentFactory.createTransferServer(args[0], System.in, System.out); + server.run(); + } + +} diff --git a/src/main/java/dslab/util/Config.java b/src/main/java/dslab/util/Config.java new file mode 100644 index 0000000..e0fa04d --- /dev/null +++ b/src/main/java/dslab/util/Config.java @@ -0,0 +1,79 @@ +package dslab.util; + +import java.util.HashMap; +import java.util.Map; +import java.util.ResourceBundle; +import java.util.Set; + +/** + * Reads the configuration from a {@code .properties} file. + */ +public final class Config { + + private final ResourceBundle bundle; + private Map properties = new HashMap<>(); + + /** + * Creates an instance of Config which reads configuration data form {@code .properties} file with given name found + * in classpath. + * + * @param name the name of the .properties file + */ + public Config(String name) { + if (name.endsWith(".properties")) { + this.bundle = ResourceBundle.getBundle(name.substring(0, name.length() - 11)); + } else { + this.bundle = ResourceBundle.getBundle(name); + } + } + + /** + * Returns the value as String for the given key. + * + * @param key the property's key + * @return String value of the property + * @see ResourceBundle#getString(String) + */ + public String getString(String key) { + if (properties.containsKey(key)) { + return properties.get(key).toString(); + } + return this.bundle.getString(key); + } + + /** + * Returns the value as {@code int} for the given key. + * + * @param key the property's key + * @return int value of the property + * @throws NumberFormatException if the String cannot be parsed to an Integer + */ + public int getInt(String key) { + return Integer.parseInt(getString(key)); + } + + public boolean containsKey(String key) { + return properties.containsKey(key) || bundle.containsKey(key); + } + + /** + * Sets the value for the given key. + * + * @param key the property's key + * @param value the value of the property + */ + public void setProperty(String key, Object value) { + properties.put(key, value); + } + + /** + * Returns all keys of this configuration. + * + * @return the keys + */ + public Set listKeys() { + Set keys = bundle.keySet(); + keys.addAll(properties.keySet()); + return keys; + } +} diff --git a/src/main/java/dslab/util/Keys.java b/src/main/java/dslab/util/Keys.java new file mode 100644 index 0000000..414470c --- /dev/null +++ b/src/main/java/dslab/util/Keys.java @@ -0,0 +1,132 @@ +package dslab.util; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileReader; +import java.io.IOException; +import java.nio.file.Files; +import java.security.KeyFactory; +import java.security.NoSuchAlgorithmException; +import java.security.NoSuchProviderException; +import java.security.PrivateKey; +import java.security.PublicKey; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.KeySpec; +import java.security.spec.PKCS8EncodedKeySpec; +import java.security.spec.X509EncodedKeySpec; + +import javax.crypto.spec.SecretKeySpec; + +/** + * Reads encryption keys from the file system. + */ +public final class Keys { + + private Keys() { + // util class + } + + /** + * Reads an RSA private key from the given file. + * The key files must be in DER format so JAVA can read it. + * + * @param file the file containing the RSA key + * @return a PrivateKey instance + * @throws IOException if an exception occurred while reading the key file + * @throws NullPointerException if encoded key is null + * @throws IllegalStateException if an error occurred in the java security api + */ + public static PrivateKey readPrivateKey(File file) throws IOException, NullPointerException, IllegalStateException { + try { + byte[] fileContent = Files.readAllBytes(file.toPath()); + PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(fileContent); + + return createPrivateKey(spec); + } + catch (IOException e) { + throw new IOException(String.format("Cannot read key file %s.", file.getCanonicalPath())); + } + catch (NullPointerException e) { + throw new NullPointerException(String.format("Key seems to be empty from file %s", file.getCanonicalPath())); + } + } + + /** + * Reads an RSA public key from the given file. + * The key files must be in DER format so JAVA can read it. + * + * @param file the file containing the RSA key + * @return a PublicKey instance + * @throws IOException if an exception occurred while reading the key file + * @throws NullPointerException if encoded key is null + * @throws IllegalStateException if an error occurred in the java security api + */ + public static PublicKey readPublicKey(File file) throws IOException, NullPointerException, IllegalStateException { + try { + byte[] fileContent = Files.readAllBytes(file.toPath()); + X509EncodedKeySpec spec = new X509EncodedKeySpec(fileContent); + + return createPublicKey(spec); + } + catch (IOException e) { + throw new IOException(String.format("Cannot read key file %s.", file.getCanonicalPath()), e); + } + catch (NullPointerException e) { + throw new NullPointerException(String.format("Key seems to be empty from file %s", file.getCanonicalPath())); + } + } + + /** + * Reads the {@link SecretKeySpec} from the given location which is expected to contain a HMAC SHA-256 key. + * + * @param file the path to key located in the file system + * @return the secret key + * @throws IOException if an I/O error occurs or the security provider cannot handle the file + */ + public static SecretKeySpec readSecretKey(File file) throws IOException { + try (FileInputStream in = new FileInputStream(file)) { + byte[] keyBytes = new byte[1024]; + if (in.read(keyBytes) < 0) { + throw new IOException(String.format("Cannot read key file %s.", file.getCanonicalPath())); + } + + byte[] input = hexStringToByteArray(new String(keyBytes)); + return new SecretKeySpec(input, "HmacSHA256"); + } + } + + private static PrivateKey createPrivateKey(KeySpec spec) { + try { + return getRsaKeyFactory().generatePrivate(spec); + } catch (InvalidKeySpecException e) { + throw new IllegalStateException("Error creating private key", e); + } + } + + private static PublicKey createPublicKey(KeySpec spec) { + try { + return getRsaKeyFactory().generatePublic(spec); + } catch (InvalidKeySpecException e) { + throw new IllegalStateException("Error creating private key", e); + } + } + + private static KeyFactory getRsaKeyFactory() throws IllegalStateException { + try { + return KeyFactory.getInstance("RSA"); + } catch (NoSuchAlgorithmException e) { + throw new IllegalStateException("Error creating RSA key factory with default security provider", e); + } + } + + public static byte[] hexStringToByteArray(String s) { + int len = s.length(); + byte[] data = new byte[len / 2]; + for (int i = 0; i < len; i += 2) { + data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + + Character.digit(s.charAt(i+1), 16)); + } + return data; + } + +} diff --git a/src/main/resources/client-arthur.properties b/src/main/resources/client-arthur.properties new file mode 100644 index 0000000..fdcde1f --- /dev/null +++ b/src/main/resources/client-arthur.properties @@ -0,0 +1,10 @@ +# TODO: replace host and port with that of your server +transfer.host=127.0.0.1 +transfer.port=port_range +transfer.email=arthur@earth.planet + +# TODO: replace host and port with that of your server +mailbox.host=127.0.0.1 +mailbox.port=port_range+3 +mailbox.user=arthur +mailbox.password=23456 diff --git a/src/main/resources/client-trillian.properties b/src/main/resources/client-trillian.properties new file mode 100644 index 0000000..0b757d7 --- /dev/null +++ b/src/main/resources/client-trillian.properties @@ -0,0 +1,10 @@ +# TODO: replace host and port with that of your server +transfer.host=127.0.0.1 +transfer.port=port_range +transfer.email=trillian@earth.planet + +# TODO: replace host and port with that of your server +mailbox.host=127.0.0.1 +mailbox.port=port_range+3 +mailbox.user=trillian +mailbox.password=12345 diff --git a/src/main/resources/client-zaphod.properties b/src/main/resources/client-zaphod.properties new file mode 100644 index 0000000..f4f6aa7 --- /dev/null +++ b/src/main/resources/client-zaphod.properties @@ -0,0 +1,10 @@ +# TODO: replace host and port with that of your server +transfer.host=127.0.0.1 +transfer.port=port_range+1 +transfer.email=zaphod@univer.ze + +# TODO: replace host and port with that of your server +mailbox.host=127.0.0.1 +mailbox.port=port_range+5 +mailbox.user=zaphod +mailbox.password=12345 diff --git a/src/main/resources/domains.properties b/src/main/resources/domains.properties new file mode 100644 index 0000000..622fcaa --- /dev/null +++ b/src/main/resources/domains.properties @@ -0,0 +1,4 @@ +# = +# TODO: replace ports with the ports that your mailbox servers use +earth.planet=127.0.0.1:port_range+2 +univer.ze=127.0.0.1:port_range+4 diff --git a/src/main/resources/mailbox-earth-planet.properties b/src/main/resources/mailbox-earth-planet.properties new file mode 100644 index 0000000..acf1724 --- /dev/null +++ b/src/main/resources/mailbox-earth-planet.properties @@ -0,0 +1,25 @@ +# TCP port used for the DMTP server socket +# TODO: REPLACE with real value such as 16502 - considering the port range associated with your account - you have received after Lab 0 a port range (beginning_of_the_range, end_of_the_range) +dmtp.tcp.port=port_range+2 + +# TCP port used for the DMAP server socket +# TODO: REPLACE with real value such as 16503 - considering the port range associated with your account - you have received after Lab 0 a port range (beginning_of_the_range, end_of_the_range) +dmap.tcp.port=port_range+3 + +# mail domain managed by the mailbox server +domain=earth.planet + +# location of the users for this mailbox server +users.config=users-earth-planet.properties + +# ============================================= Required for Assignment 2 + +# name of the root nameserver's remote object +root_id=root-nameserver + +# RMI registry host +registry.host=localhost + +# RMI registry port +# TODO: REPLACE with real value such as 16509 - considering the port range associated with your account - you have received after Lab 0 a port range (beginning_of_the_range, end_of_the_range) +registry.port=port_range+9 diff --git a/src/main/resources/mailbox-univer-ze.properties b/src/main/resources/mailbox-univer-ze.properties new file mode 100644 index 0000000..f07c01d --- /dev/null +++ b/src/main/resources/mailbox-univer-ze.properties @@ -0,0 +1,25 @@ +# TCP port used for the DMTP server socket +# TODO: REPLACE with real value such as 16504 - considering the port range associated with your account - you have received after Lab 0 a port range (beginning_of_the_range, end_of_the_range) +dmtp.tcp.port=port_range+4 + +# TCP port used for the DMAP server socket +# TODO: REPLACE with real value such as 16505 - considering the port range associated with your account - you have received after Lab 0 a port range (beginning_of_the_range, end_of_the_range) +dmap.tcp.port=port_range+5 + +# mail domain managed by the mailbox server +domain=univer.ze + +# location of the users for this mailbox server +users.config=users-univer-ze.properties + +# ============================================= Required for Assignment 2 + +# name of the root nameserver's remote object +root_id=root-nameserver + +# RMI registry host +registry.host=localhost + +# RMI registry port +# TODO: REPLACE with real value such as 16509 - considering the port range associated with your account - you have received after Lab 0 a port range (beginning_of_the_range, end_of_the_range) +registry.port=port_range+9 diff --git a/src/main/resources/monitoring.properties b/src/main/resources/monitoring.properties new file mode 100644 index 0000000..8aff76c --- /dev/null +++ b/src/main/resources/monitoring.properties @@ -0,0 +1,3 @@ +# UDP port used for accepting monitoring packets +# TODO: REPLACE with real value such as 16508 - considering the port range associated with your account - you have received after Lab 0 a port range (beginning_of_the_range, end_of_the_range) +udp.port=port_range+8 diff --git a/src/main/resources/ns-earth-planet.properties b/src/main/resources/ns-earth-planet.properties new file mode 100644 index 0000000..fae2722 --- /dev/null +++ b/src/main/resources/ns-earth-planet.properties @@ -0,0 +1,13 @@ +# binding name +root_id=root-nameserver + +# registry host +registry.host=localhost + +# registry port +# TODO: REPLACE with real value such as 16509 - considering the port range associated with your account - you have received after Lab 0 a port range (beginning_of_the_range, end_of_the_range) +registry.port=port_range+9 + + +# managed domain +domain=earth.planet \ No newline at end of file diff --git a/src/main/resources/ns-planet.properties b/src/main/resources/ns-planet.properties new file mode 100644 index 0000000..bb5b73b --- /dev/null +++ b/src/main/resources/ns-planet.properties @@ -0,0 +1,13 @@ +# binding name +root_id=root-nameserver + +# registry host +registry.host=localhost + +# registry port +# TODO: REPLACE with real value such as 16509 - considering the port range associated with your account - you have received after Lab 0 a port range (beginning_of_the_range, end_of_the_range) +registry.port=port_range+9 + + +# managed domain +domain=planet diff --git a/src/main/resources/ns-root.properties b/src/main/resources/ns-root.properties new file mode 100644 index 0000000..c8ca59e --- /dev/null +++ b/src/main/resources/ns-root.properties @@ -0,0 +1,9 @@ +# binding name +root_id=root-nameserver + +# registry host +registry.host=localhost + +# registry port +# TODO: REPLACE with real value such as 16509 - considering the port range associated with your account - you have received after Lab 0 a port range (beginning_of_the_range, end_of_the_range) +registry.port=port_range+9 diff --git a/src/main/resources/ns-ze.properties b/src/main/resources/ns-ze.properties new file mode 100644 index 0000000..1dee980 --- /dev/null +++ b/src/main/resources/ns-ze.properties @@ -0,0 +1,13 @@ +# binding name +root_id=root-nameserver + +# registry host +registry.host=localhost + +# registry port +# TODO: REPLACE with real value such as 16509 - considering the port range associated with your account - you have received after Lab 0 a port range (beginning_of_the_range, end_of_the_range) +registry.port=port_range+9 + + +# managed domain +domain=ze \ No newline at end of file diff --git a/src/main/resources/transfer-1.properties b/src/main/resources/transfer-1.properties new file mode 100644 index 0000000..0b87450 --- /dev/null +++ b/src/main/resources/transfer-1.properties @@ -0,0 +1,20 @@ +# TCP port used for the DMTP server socket +# TODO: REPLACE with real value such as 16500 - considering the port range associated with your account - you have received after Lab 0 a port range (beginning_of_the_range, end_of_the_range) +tcp.port=port_range + +# UDP socket address of the monitoring server +monitoring.host=127.0.0.1 +# TODO: REPLACE with the real value of the monitoring server port +monitoring.port=port_range+8 + +# ============================================= Required for Assignment 2 + +# name of the root nameserver's remote object +root_id=root-nameserver + +# RMI registry host +registry.host=localhost + +# RMI registry port +# TODO: REPLACE with real value such as 16509 - considering the port range associated with your account - you have received after Lab 0 a port range (beginning_of_the_range, end_of_the_range) +registry.port=port_range+9 diff --git a/src/main/resources/transfer-2.properties b/src/main/resources/transfer-2.properties new file mode 100644 index 0000000..11757ab --- /dev/null +++ b/src/main/resources/transfer-2.properties @@ -0,0 +1,20 @@ +# TCP port used for the DMTP server socket +# TODO: REPLACE with real value such as 16501 - considering the port range associated with your account - you have received after Lab 0 a port range (beginning_of_the_range, end_of_the_range) +tcp.port=port_range+1 + +# UDP socket address of the monitoring server +monitoring.host=127.0.0.1 +# TODO: REPLACE with the real value of the monitoring server port +monitoring.port=port_range+8 + +# ============================================= Required for Assignment 2 + +# name of the root nameserver's remote object +root_id=root-nameserver + +# RMI registry host +registry.host=localhost + +# RMI registry port +# TODO: REPLACE with real value such as 16509 - considering the port range associated with your account - you have received after Lab 0 a port range (beginning_of_the_range, end_of_the_range) +registry.port=port_range+9 diff --git a/src/main/resources/users-earth-planet.properties b/src/main/resources/users-earth-planet.properties new file mode 100644 index 0000000..1faf335 --- /dev/null +++ b/src/main/resources/users-earth-planet.properties @@ -0,0 +1,3 @@ +# = +trillian=12345 +arthur=23456 diff --git a/src/main/resources/users-univer-ze.properties b/src/main/resources/users-univer-ze.properties new file mode 100644 index 0000000..ae3c292 --- /dev/null +++ b/src/main/resources/users-univer-ze.properties @@ -0,0 +1,2 @@ +# = +zaphod=12345 diff --git a/src/test/java/dslab/CheckedConsumer.java b/src/test/java/dslab/CheckedConsumer.java new file mode 100644 index 0000000..c5b9c00 --- /dev/null +++ b/src/test/java/dslab/CheckedConsumer.java @@ -0,0 +1,9 @@ +package dslab; + +/** + * CheckedConsumer. + */ +@FunctionalInterface +public interface CheckedConsumer { + void accept(T socket) throws E; +} diff --git a/src/test/java/dslab/Constants.java b/src/test/java/dslab/Constants.java new file mode 100644 index 0000000..9c488d3 --- /dev/null +++ b/src/test/java/dslab/Constants.java @@ -0,0 +1,14 @@ +package dslab; + +public interface Constants { + + /** + * Default time (in milliseconds) to wait after starting a component to test. + */ + long COMPONENT_STARTUP_WAIT = 3000; + + /** + * Default time (in milliseconds) to wait after shutting down a component to test. + */ + long COMPONENT_TEARDOWN_WAIT = 3000; +} diff --git a/src/test/java/dslab/JunitSocketClient.java b/src/test/java/dslab/JunitSocketClient.java new file mode 100644 index 0000000..73419e6 --- /dev/null +++ b/src/test/java/dslab/JunitSocketClient.java @@ -0,0 +1,135 @@ +package dslab; + +import static org.hamcrest.CoreMatchers.containsString; + +import java.io.Closeable; +import java.io.IOException; +import java.io.PrintWriter; +import java.net.Socket; +import java.util.concurrent.TimeUnit; + +import org.hamcrest.Matcher; +import org.junit.Assert; +import org.junit.rules.ErrorCollector; + +public class JunitSocketClient implements Closeable { + + private ErrorCollector err; + + private Socket socket; + private PrintWriter writer; + + private StreamListener listener; + + /** + * Creates a new Socket that connects to localhost on the given port and holds the I/O resources. + * + * @param port the port to connect to + * @throws IOException if an I/O error occurred while connecting. + */ + public JunitSocketClient(int port) throws IOException { + this(new Socket("127.0.0.1", port)); + } + + public JunitSocketClient(Socket socket) throws IOException { + this.socket = socket; + this.writer = new PrintWriter(socket.getOutputStream()); + this.listener = new StreamListener(socket.getInputStream()); + + new Thread(listener).start(); + } + + /** + * Creates a new Socket that connects to localhost on the given port and holds the I/O resources. + * + * @param port the port to connect to + * @param err the error collector used to verify communication + * @throws IOException if an I/O error occurred while connecting. + */ + + public JunitSocketClient(int port, ErrorCollector err) throws IOException { + this(port); + this.err = err; + } + + public Socket getSocket() { + return socket; + } + + public PrintWriter getWriter() { + return writer; + } + + public void send(String message) { + writer.println(message); + writer.flush(); + } + + public String sendAndListen(String message) { + send(message); + return listen(); + } + + public String listen() { + return listen(1, TimeUnit.SECONDS); + } + + public String listen(long time, TimeUnit timeUnit) { + return listener.listen(time, timeUnit); + } + + public String read() throws IOException { + return listener.poll(1, TimeUnit.MINUTES); + } + + /** + * Reads a line from the input stream and verifies that it contains the given string. + * + * @param string the partial string to match + * @throws IOException on read errors + */ + public void verify(String string) throws IOException { + assertThat(read(), containsString(string)); + } + + /** + * Writes the given string to the output stream, and then behaves like {@link #verify(String)}. + * + * @param request the request to send + * @param response the expected response (partial string match) + * @throws IOException on I/O errors + */ + public void sendAndVerify(String request, String response) throws IOException { + assertThat(sendAndRead(request), containsString(response)); + } + + public String sendAndRead(String message) throws IOException { + send(message); + return read(); + } + + @Override + public void close() throws IOException { + closeQuietly(listener); + closeQuietly(writer); + closeQuietly(socket); + } + + private void assertThat(T actual, Matcher matcher) { + if (err != null) { + err.checkThat(actual, matcher); + } else { + Assert.assertThat(actual, matcher); + } + } + + private void closeQuietly(Closeable closeable) { + if (closeable != null) { + try { + closeable.close(); + } catch (IOException e) { + // ignore + } + } + } +} diff --git a/src/test/java/dslab/NullOutputStream.java b/src/test/java/dslab/NullOutputStream.java new file mode 100644 index 0000000..9353e42 --- /dev/null +++ b/src/test/java/dslab/NullOutputStream.java @@ -0,0 +1,38 @@ +package dslab; + +import java.io.OutputStream; + +/** + * This {@link OutputStream} has no destination (file/socket etc.) and all bytes written to it are ignored and lost. + */ +public final class NullOutputStream extends OutputStream { + public static final OutputStream INSTANCE = new NullOutputStream(); + + private NullOutputStream() { + } + + public static OutputStream getInstance() { + return INSTANCE; + } + + /** + * Discards the specified byte. + */ + @Override + public void write(int b) { + } + + /** + * Discards the specified byte array. + */ + @Override + public void write(byte[] b) { + } + + /** + * Discards the specified byte array. + */ + @Override + public void write(byte[] b, int off, int len) { + } +} diff --git a/src/test/java/dslab/SimpleTcpServer.java b/src/test/java/dslab/SimpleTcpServer.java new file mode 100644 index 0000000..d7e436f --- /dev/null +++ b/src/test/java/dslab/SimpleTcpServer.java @@ -0,0 +1,86 @@ +package dslab; + +import java.io.Closeable; +import java.io.IOException; +import java.io.UncheckedIOException; +import java.net.ServerSocket; +import java.net.Socket; +import java.net.SocketException; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Used for mocking purposes, this class provides a simple control loop over a ServerSocket. + */ +public class SimpleTcpServer implements Runnable, Closeable { + + private static final Log LOG = LogFactory.getLog(SimpleTcpServer.class); + + private final int port; + private CheckedConsumer socketAcceptor; + + private ServerSocket serverSocket; + + public SimpleTcpServer(int port) { + this.port = port; + } + + public synchronized CheckedConsumer getSocketAcceptor() { + return socketAcceptor; + } + + public void setSocketAcceptor(CheckedConsumer socketAcceptor) { + this.socketAcceptor = socketAcceptor; + } + + @Override + public void run() { + try { + LOG.info("Starting mock server on " + port); + serverSocket = new ServerSocket(port); + + while (true) { + Socket connection; + try { + LOG.info("Listening on client connection"); + connection = serverSocket.accept(); + } catch (SocketException e) { + break; + } + + try { + LOG.info("Processing client connection " + connection); + onAccept(connection); + } catch (SocketException e) { + continue; + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } + + } catch (IOException e) { + throw new UncheckedIOException(e); + } finally { + close(); + } + } + + @Override + public void close() { + if (serverSocket != null) { + try { + LOG.info("Closing server socket"); + serverSocket.close(); + } catch (IOException e) { + LOG.warn("Error closing server socket", e); + } + } + } + + protected void onAccept(Socket socket) throws IOException { + if (socketAcceptor != null) { + socketAcceptor.accept(socket); + } + } +} diff --git a/src/test/java/dslab/Sockets.java b/src/test/java/dslab/Sockets.java new file mode 100644 index 0000000..cbb2632 --- /dev/null +++ b/src/test/java/dslab/Sockets.java @@ -0,0 +1,84 @@ +package dslab; + +import java.io.IOException; +import java.net.BindException; +import java.net.DatagramSocket; +import java.net.ServerSocket; +import java.net.Socket; +import java.net.SocketException; +import java.net.SocketTimeoutException; + +/** + * Util class for checking sockets. + */ +public final class Sockets { + + private Sockets() { + // util class + } + + /** + * Waits a given time for a TCP server socket to be opened at the given host and port by repeatedly (every 10 ms) + * trying to connect to the address. + * + * @param host the expected server socket host + * @param port the expected server socket port + * @param ms the time in milliseconds. + * @throws SocketTimeoutException if the timeout period was reached + */ + public static void waitForSocket(String host, int port, long ms) throws SocketTimeoutException { + long interval = 10; + + while (ms > 0) { + try (Socket ignored = new Socket(host, port)) { + return; + } catch (IOException e) { + ms -= interval; + + try { + Thread.sleep(interval); + } catch (InterruptedException e1) { + break; + } + } + } + + throw new SocketTimeoutException("Gave up waiting for socket " + host + ":" + port); + } + + /** + * Tries to open a DatagramSocket on the given port. If a BindException is thrown, it indicates that the socket was + * open before, and the method will return true. If the socket was opened successfully, the method returns false and + * immediately closes the socket. + * + * @param port the local port + * @return true if the socket was already open + * @throws SocketException if the socket could not be opened due to some other reason than a bind exception + */ + public static boolean isDatagramSocketOpen(int port) throws SocketException { + try (DatagramSocket socket = new DatagramSocket(port)) { + return false; + } catch (BindException e) { + return true; + } + } + + /** + * Tries to open a ServerSocket on the given port. If a BindException is thrown, it indicates that the socket was + * open before, and the method will return true. If the socket was opened successfully, the method returns false and + * immediately closes the socket. + * + * @param port the local port + * @return true if the socket was already open + * @throws IOException if the socket could not be opened due to some other reason than a bind exception + */ + public static boolean isServerSocketOpen(int port) throws IOException { + try (ServerSocket socket = new ServerSocket(port)) { + return false; + } catch (BindException e) { + return true; + } + } + + +} diff --git a/src/test/java/dslab/StreamListener.java b/src/test/java/dslab/StreamListener.java new file mode 100644 index 0000000..4468903 --- /dev/null +++ b/src/test/java/dslab/StreamListener.java @@ -0,0 +1,80 @@ +package dslab; + +import java.io.BufferedReader; +import java.io.Closeable; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.UncheckedIOException; +import java.net.SocketException; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.TimeUnit; + +/** + * Runnable that reads from a Socket's InputStream line-by-line and writes it to a queue, until the socket is closed. + */ +public class StreamListener implements Runnable, Closeable { + + public static final String NULL_CHAR = new String(new byte[]{0x0}); + + private InputStream in; + private LinkedBlockingQueue queue; + + public StreamListener(InputStream in) { + this.in = in; + this.queue = new LinkedBlockingQueue<>(); + } + + private static String removeNullBytes(String str) { + return str.replace(NULL_CHAR, ""); + } + + public String poll(long timeout, TimeUnit timeUnit) { + try { + return queue.poll(timeout, timeUnit); + } catch (InterruptedException e) { + return null; + } + } + + public String listen(long timeout, TimeUnit timeUnit) { + StringBuilder str = new StringBuilder(128); + + String line; + while ((line = poll(timeout, timeUnit)) != null) { + str.append(removeNullBytes(line)).append("\n"); + } + + if (str.length() > 0) { + // remove trailing whitespace + int i = str.length() - 1; + if ('\n' == str.charAt(i)) { + str.deleteCharAt(i); + } + } + + return str.toString(); + } + + @Override + public void run() { + BufferedReader reader = new BufferedReader(new InputStreamReader(in)); + + String line; + try { + while ((line = reader.readLine()) != null) { + queue.offer(line); + } + } catch (SocketException e) { + // socket closed + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } + + @Override + public void close() throws IOException { + in.close(); + } + +} diff --git a/src/test/java/dslab/StringMatches.java b/src/test/java/dslab/StringMatches.java new file mode 100644 index 0000000..cc88958 --- /dev/null +++ b/src/test/java/dslab/StringMatches.java @@ -0,0 +1,30 @@ +package dslab; + +import org.hamcrest.Factory; +import org.hamcrest.Matcher; +import org.hamcrest.core.SubstringMatcher; + +/** + * String matcher that checks for regex matching. + */ +public class StringMatches extends SubstringMatcher { + + public StringMatches(String substring) { + super(substring); + } + + @Factory + public static Matcher matchesPattern(String pattern) { + return new StringMatches(pattern); + } + + @Override + protected boolean evalSubstringOf(String string) { + return string.matches(substring); + } + + @Override + protected String relationship() { + return "matching"; + } +} diff --git a/src/test/java/dslab/TestBase.java b/src/test/java/dslab/TestBase.java new file mode 100644 index 0000000..62be93b --- /dev/null +++ b/src/test/java/dslab/TestBase.java @@ -0,0 +1,30 @@ +package dslab; + +import java.util.concurrent.TimeUnit; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.rules.ErrorCollector; +import org.junit.rules.Timeout; + +/** + * Contains a generic setup for a unit test. + */ +public class TestBase { + + @Rule + public ErrorCollector err = new ErrorCollector(); + + @Rule + public Timeout timeout = new Timeout(30, TimeUnit.SECONDS); // fail tests that do not terminate after 30 seconds + + protected TestInputStream in; + protected TestOutputStream out; + + @Before + public void setUpBase() throws Exception { + in = new TestInputStream(); + out = new TestOutputStream(); + } + +} diff --git a/src/test/java/dslab/TestInputStream.java b/src/test/java/dslab/TestInputStream.java new file mode 100644 index 0000000..7d07cb9 --- /dev/null +++ b/src/test/java/dslab/TestInputStream.java @@ -0,0 +1,99 @@ +package dslab; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.TimeUnit; + +/** + * Simulates reading lines from an {@link InputStream}. + * + * Internally, the lines read from the underlying {@link InputStream} are buffered and can be retrieved on demand for + * verification purposes. + */ +public class TestInputStream extends InputStream { + private volatile BlockingQueue lines = new LinkedBlockingQueue<>(); + private InputStream in; + + @Override + public synchronized int read() throws IOException { + if (in == null) { + if ((in = nextLine()) == null) { + return -1; + } + } else if (in.available() <= 0) { + try { + return -1; + } finally { + in = null; + } + } + return in != null ? in.read() : -1; + } + + /** + * Returns a copy of the lines available for reading. + * + * @return the available lines + * @throws IOException if the stream is closed + */ + public List getLines() throws IOException { + List copy = new ArrayList<>(); + do { + try { + copy.add(lines.take()); + } catch (InterruptedException e) { + throw new IOException(e); + } + } while (lines.size() > 0); + return copy; + } + + /** + * Adds the given line to the input queue. + * + * @param line the line to add + */ + public void addLine(String line) { + if (lines != null) { + lines.add(line); + } + } + + /** + * Prepares the next line available for reading from it. + *

+ * This method blocks until a line is available or the stream becomes closed. + * + * @return the {@link InputStream} holding the line + * @throws IOException if the stream is closed + */ + private InputStream nextLine() throws IOException { + try { + String line = null; + while (lines != null && line == null) { + line = lines.poll(500L, TimeUnit.MILLISECONDS); + } + if (line != null) { + return new ByteArrayInputStream((line.endsWith("\n") ? line : line + '\n').getBytes()); + } else { + return new ByteArrayInputStream("".getBytes()); + } + } catch (InterruptedException e) { + throw new IOException(e); + } + } + + @Override + public void close() throws IOException { + if (in != System.in) { + super.close(); + } + lines = null; + Thread.currentThread().interrupt(); + } +} diff --git a/src/test/java/dslab/TestOutputStream.java b/src/test/java/dslab/TestOutputStream.java new file mode 100644 index 0000000..d01b9be --- /dev/null +++ b/src/test/java/dslab/TestOutputStream.java @@ -0,0 +1,150 @@ +package dslab; + +import java.io.PrintStream; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.TimeUnit; + +/** + * Simulates writing lines to an {@link PrintStream}. + *

+ * Internally, the lines written to the underlying {@link PrintStream} are buffered and can be retrieved on demand for + * verification purposes. + */ +public class TestOutputStream extends PrintStream { + private final LinkedBlockingQueue lines = new LinkedBlockingQueue<>(); + private volatile StringBuilder line = new StringBuilder(); + private PrintStream delegate; + + /** + * Creates a new {@code TestOutputStream} instance writing to an {@link NullOutputStream}. + */ + public TestOutputStream() { + this(new PrintStream(NullOutputStream.getInstance())); + } + + /** + * Creates a new {@code TestOutputStream} instance writing to the provided {@link PrintStream}. + * + * @param delegate the stream to write to + */ + public TestOutputStream(PrintStream delegate) { + super(delegate); + this.delegate = delegate; + } + + @Override + public void close() { + if (delegate != System.out) { + super.close(); + } + } + + @Override + public void write(int b) { + delegate.write(b); + if (b == '\r') { + // Do nothing + } else if (b == '\n') { + addLine(); + } else { + line.append((char) b); + } + } + + public void write(byte b[], int off, int len) { + if (b == null) { + throw new NullPointerException(); + } else if ((off < 0) || (off > b.length) || (len < 0) || ((off + len) > b.length) || ((off + len) < 0)) { + throw new IndexOutOfBoundsException(); + } else if (len == 0) { + return; + } + for (int i = 0; i < len; i++) { + write(b[off + i]); + } + } + + /** + * Returns a copy of the lines written to the {@link PrintStream} so far. + * + * @return the written lines + */ + public List getLines() { + synchronized (lines) { + if (line.length() > 0) { + addLine(); + } + return new ArrayList<>(lines); + } + } + + /** + * Listens for stream output until no output has been received for one second. + * + * @return the aggregated output (joined by a newline) + * @throws InterruptedException if the polling was interrupted + */ + public String listen() throws InterruptedException { + return listen(1, TimeUnit.SECONDS); + } + + public String listen(long timeout, TimeUnit timeUnit) throws InterruptedException { + StringBuilder str = new StringBuilder(128); + + String line; + while ((line = poll(timeout, timeUnit)) != null) { + str.append(line).append("\n"); + } + + if (str.length() > 0) { + // remove trailing whitespace + int i = str.length() - 1; + if ('\n' == str.charAt(i)) { + str.deleteCharAt(i); + } + } + + return str.toString(); + } + + public String poll(long time, TimeUnit timeUnit) throws InterruptedException { + return lines.poll(time, timeUnit); + } + + /** + * Returns a copy of the lines written to the {@link PrintStream} so far and clears the buffer. + * + * @return the written lines + * @see #getLines() + * @see #clear() + */ + public List reset() { + synchronized (lines) { + List lines = getLines(); + clear(); + return lines; + } + } + + /** + * Clears the buffer holding the lines written to the {@link PrintStream} so far. + */ + private void clear() { + synchronized (lines) { + lines.clear(); + line = new StringBuilder(); + } + } + + /** + * Appends the current line to the buffer. + */ + private void addLine() { + synchronized (lines) { + lines.add(line.toString()); + line = new StringBuilder(); + } + } +} diff --git a/src/test/java/dslab/client/MessageClientMailboxTest.java b/src/test/java/dslab/client/MessageClientMailboxTest.java new file mode 100644 index 0000000..70c7b45 --- /dev/null +++ b/src/test/java/dslab/client/MessageClientMailboxTest.java @@ -0,0 +1,173 @@ +package dslab.client; + +import static org.hamcrest.CoreMatchers.allOf; +import static org.hamcrest.CoreMatchers.anyOf; +import static org.hamcrest.CoreMatchers.containsString; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.not; + +import java.util.concurrent.TimeUnit; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ErrorCollector; + +import dslab.ComponentFactory; +import dslab.Constants; +import dslab.JunitSocketClient; +import dslab.Sockets; +import dslab.TestInputStream; +import dslab.TestOutputStream; +import dslab.util.Config; + +/** + * Starts a mailbox server and a message client, and injects mails to the mailbox server that are read by the mail + * client. Note that your mailbox server should run even if there is no naming service is available. + */ +public class MessageClientMailboxTest { + + private static final Log LOG = LogFactory.getLog(MessageClientMailboxTest.class); + + @Rule + public ErrorCollector err = new ErrorCollector(); + + private Config mailboxConfig; + private TestInputStream mailboxServerIn; + private TestOutputStream mailboxServerOut; + private Thread mailboxServerThread; + + private TestInputStream messageClientIn; + private TestOutputStream messageClientOut; + private Thread messageClientThread; + + @Before + public void setUp() throws Exception { + LOG.info("Creating mailbox server"); + mailboxConfig = new Config("mailbox-earth-planet"); + mailboxServerIn = new TestInputStream(); + mailboxServerOut = new TestOutputStream(); + Runnable mailboxServer = ComponentFactory.createMailboxServer("mailbox-earth-planet", mailboxServerIn, mailboxServerOut); + + mailboxServerThread = new Thread(mailboxServer); + mailboxServerThread.start(); + + LOG.info("Waiting for mailbox server sockets"); + Sockets.waitForSocket("localhost", mailboxConfig.getInt("dmtp.tcp.port"), Constants.COMPONENT_STARTUP_WAIT); + Sockets.waitForSocket("localhost", mailboxConfig.getInt("dmap.tcp.port"), Constants.COMPONENT_STARTUP_WAIT); + + LOG.info("Starting message client"); + messageClientIn = new TestInputStream(); + messageClientOut = new TestOutputStream(); + Runnable messageClient = ComponentFactory.createMessageClient("client-trillian", messageClientIn, messageClientOut); + + messageClientThread = new Thread(messageClient); + messageClientThread.start(); + Thread.sleep(Constants.COMPONENT_STARTUP_WAIT); + } + + @After + public void tearDown() throws Exception { + messageClientIn.addLine("shutdown"); + messageClientThread.join(Constants.COMPONENT_TEARDOWN_WAIT); + + mailboxServerIn.addLine("shutdown"); + mailboxServerThread.join(Constants.COMPONENT_TEARDOWN_WAIT); + } + + @Test(timeout = 20000) + public void inbox_singleMail_showsAllInboxDataCorrectly() throws Exception { + + try (JunitSocketClient client = new JunitSocketClient(mailboxConfig.getInt("dmtp.tcp.port"), err)) { + err.checkThat("Expected mailbox server to implement DMTP2.0", client.read(), is("ok DMTP2.0")); + client.sendAndVerify("begin", "ok"); + client.sendAndVerify("from arthur@earth.planet", "ok"); + client.sendAndVerify("to trillian@earth.planet", "ok"); + client.sendAndVerify("subject somesubject", "ok"); + client.sendAndVerify("data somedata", "ok"); + client.sendAndVerify("hash 98yUrgHu4BctmhAel19nUAhGRVdVh9qD7Ge3VJBiehk=", "ok"); // valid hash + client.sendAndVerify("send", "ok"); + client.send("quit"); + } + + Thread.sleep(2000); // wait a bit + + messageClientIn.addLine("inbox"); + String output = messageClientOut.listen(); + + err.checkThat(output, allOf( + containsString("trillian@earth.planet"), + containsString("arthur@earth.planet"), + containsString("somesubject"), + containsString("somedata") + )); + } + + @Test(timeout = 40000) + public void inbox_mulipleMails_showsAllInboxDataCorrectly() throws Exception { + + // send a mail to trillian + try (JunitSocketClient client = new JunitSocketClient(mailboxConfig.getInt("dmtp.tcp.port"), err)) { + err.checkThat("Expected mailbox server to implement DMTP2.0", client.read(), is("ok DMTP2.0")); + client.sendAndVerify("begin", "ok"); + client.sendAndVerify("from arthur@earth.planet", "ok"); + client.sendAndVerify("to trillian@earth.planet", "ok"); + client.sendAndVerify("subject somesubject", "ok"); + client.sendAndVerify("data somedata", "ok"); + client.sendAndVerify("hash 98yUrgHu4BctmhAel19nUAhGRVdVh9qD7Ge3VJBiehk=", "ok"); // valid hash + client.sendAndVerify("send", "ok"); + client.send("quit"); + } + + // send another mail to trillian + try (JunitSocketClient client = new JunitSocketClient(mailboxConfig.getInt("dmtp.tcp.port"), err)) { + err.checkThat(client.read(), is("ok DMTP2.0")); + client.sendAndVerify("begin", "ok"); + client.sendAndVerify("from zaphod@univer.ze", "ok"); + client.sendAndVerify("to trillian@earth.planet", "ok"); + client.sendAndVerify("subject zaphodsubject", "ok"); + client.sendAndVerify("data zaphoddata", "ok"); + client.sendAndVerify("hash 4Bctm9nHuVU9qe3VJBhiAhGR987GyUekrgdVhhAel1D=", "ok"); // invalid hash + client.sendAndVerify("send", "ok"); + client.send("quit"); + } + + // send a mail to arthur + try (JunitSocketClient client = new JunitSocketClient(mailboxConfig.getInt("dmtp.tcp.port"), err)) { + err.checkThat(client.read(), is("ok DMTP2.0")); + client.sendAndVerify("begin", "ok"); + client.sendAndVerify("from zaphod@univer.ze", "ok"); + client.sendAndVerify("to arthur@earth.planet", "ok"); + client.sendAndVerify("subject nottrilliansubject", "ok"); + client.sendAndVerify("data nottrilliandata", "ok"); + client.sendAndVerify("hash gdBctmhAeU9qel1DuV3VJBiUrhkA9Vhe4n987GyHhGR=", "ok"); // invalid hash + client.sendAndVerify("send", "ok"); + client.send("quit"); + } + + Thread.sleep(2000); // wait a bit + + messageClientIn.addLine("inbox"); + String output = messageClientOut.listen(3, TimeUnit.SECONDS); + + err.checkThat("inbox output did not contain all data from first mail", output, allOf( + containsString("trillian@earth.planet"), + containsString("arthur@earth.planet"), + containsString("somesubject"), + containsString("somedata") + )); + err.checkThat("inbox output did not contain all data from second mail", output, allOf( + containsString("zaphod@univer.ze"), + containsString("zaphodsubject"), + containsString("zaphoddata") + )); + err.checkThat("inbox output contained data from a different user", output, not(anyOf( + containsString("nottrilliansubject"), + containsString("nottrilliandata") + ))); + } + +} diff --git a/src/test/java/dslab/client/MessageClientStartupTest.java b/src/test/java/dslab/client/MessageClientStartupTest.java new file mode 100644 index 0000000..f133ec1 --- /dev/null +++ b/src/test/java/dslab/client/MessageClientStartupTest.java @@ -0,0 +1,87 @@ +package dslab.client; + +import static org.hamcrest.CoreMatchers.is; + +import java.util.concurrent.CountDownLatch; + +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ErrorCollector; + +import dslab.ComponentFactory; +import dslab.Constants; +import dslab.JunitSocketClient; +import dslab.SimpleTcpServer; +import dslab.Sockets; +import dslab.TestInputStream; +import dslab.TestOutputStream; +import dslab.util.Config; + +/** + * Tests that the message client connects to the configured DMAP server at startup and sends the startsecure command. + */ +public class MessageClientStartupTest { + + @Rule + public ErrorCollector err = new ErrorCollector(); + + private SimpleTcpServer dmapServer; + private Thread serverThread; + private String clientId = "client-trillian"; + + @Before + public void setUp() throws Exception { + Config clientConfig = new Config(clientId); + int port = clientConfig.getInt("mailbox.port"); + dmapServer = new SimpleTcpServer(port); + + serverThread = new Thread(dmapServer); + serverThread.start(); + + Sockets.waitForSocket("localhost", port, Constants.COMPONENT_STARTUP_WAIT); + } + + @After + public void tearDown() throws Exception { + dmapServer.close(); + serverThread.join(Constants.COMPONENT_TEARDOWN_WAIT); + } + + @Test(timeout = 15000) + public void startClient_shouldConnectToMailboxServerAndSendStartsecure() throws Exception { + final CountDownLatch connected = new CountDownLatch(1); + + // setup mock server + dmapServer.setSocketAcceptor(socket -> { + try (JunitSocketClient client = new JunitSocketClient(socket)) { + client.send("ok DMAP2.0"); + err.checkThat("expected first command from client to be startsecure", client.read(), is("startsecure")); + + connected.countDown(); + // the server unexpectedly terminates the connection here. make sure your client can handle it! + } finally { + dmapServer.close(); + } + }); + + // setup message client + TestInputStream messageClientIn = new TestInputStream(); + TestOutputStream messageClientOut = new TestOutputStream(); + + Runnable messageClient = ComponentFactory.createMessageClient(clientId, messageClientIn, messageClientOut); + Thread messClientThread = new Thread(messageClient); + messClientThread.start(); + + // shutdown message client once the connection has been made + connected.await(); + messageClientIn.addLine("shutdown"); + + try { + messClientThread.join(Constants.COMPONENT_TEARDOWN_WAIT); + } catch (InterruptedException e) { + // ignore + } + } +} diff --git a/src/test/java/dslab/mailbox/MailboxServerProtocolTest.java b/src/test/java/dslab/mailbox/MailboxServerProtocolTest.java new file mode 100644 index 0000000..012ba78 --- /dev/null +++ b/src/test/java/dslab/mailbox/MailboxServerProtocolTest.java @@ -0,0 +1,108 @@ +package dslab.mailbox; + +import static org.hamcrest.CoreMatchers.containsString; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import dslab.ComponentFactory; +import dslab.Constants; +import dslab.JunitSocketClient; +import dslab.Sockets; +import dslab.TestBase; +import dslab.util.Config; + +public class MailboxServerProtocolTest extends TestBase { + + private static final Log LOG = LogFactory.getLog(MailboxServerProtocolTest.class); + + private String componentId = "mailbox-earth-planet"; + + private IMailboxServer component; + private int dmapServerPort; + private int dmtpServerPort; + + @Before + public void setUp() throws Exception { + component = ComponentFactory.createMailboxServer(componentId, in, out); + dmapServerPort = new Config(componentId).getInt("dmap.tcp.port"); + dmtpServerPort = new Config(componentId).getInt("dmtp.tcp.port"); + + new Thread(component).start(); + + LOG.info("Waiting for server sockets to appear"); + Sockets.waitForSocket("localhost", dmapServerPort, Constants.COMPONENT_STARTUP_WAIT); + Sockets.waitForSocket("localhost", dmtpServerPort, Constants.COMPONENT_STARTUP_WAIT); + } + + @After + public void tearDown() throws Exception { + in.addLine("shutdown"); // send "shutdown" command to command line + Thread.sleep(Constants.COMPONENT_TEARDOWN_WAIT); + } + + @Test(timeout = 15000) + public void loginAndLogout_withValidLogin() throws Exception { + try (JunitSocketClient client = new JunitSocketClient(dmapServerPort, err)) { + client.verify("ok DMAP"); + client.sendAndVerify("login trillian 12345", "ok"); + client.sendAndVerify("logout", "ok"); + client.sendAndVerify("quit", "ok bye"); + } + } + + @Test(timeout = 15000) + public void login_withInvalidLogin_returnsError() throws Exception { + try (JunitSocketClient client = new JunitSocketClient(dmapServerPort, err)) { + client.verify("ok DMAP"); + client.sendAndVerify("login trillian WRONGPW", "error"); + client.sendAndVerify("quit", "ok bye"); + } + } + + @Test(timeout = 15000) + public void acceptDmtpMessage_listDmapMessage() throws Exception { + + // accept a message via DMTP (to trillian) + try (JunitSocketClient client = new JunitSocketClient(dmtpServerPort, err)) { + client.verify("ok DMTP"); + client.sendAndVerify("begin", "ok"); + client.sendAndVerify("from arthur@earth.planet", "ok"); + client.sendAndVerify("to trillian@earth.planet", "ok 1"); + client.sendAndVerify("subject hello", "ok"); + client.sendAndVerify("data hello from junit", "ok"); + client.sendAndVerify("send", "ok"); + client.sendAndVerify("quit", "ok bye"); + } + + // list the message via DMAP list + try (JunitSocketClient client = new JunitSocketClient(dmapServerPort, err)) { + client.verify("ok DMAP"); + client.sendAndVerify("login trillian 12345", "ok"); + + client.send("list"); + String listResult = client.listen(); + err.checkThat(listResult, containsString("arthur@earth.planet hello")); + + client.sendAndVerify("logout", "ok"); + client.sendAndVerify("quit", "ok bye"); + } + } + + @Test(timeout = 15000) + public void dmtpMessage_withUnknownRecipient_returnsError() throws Exception { + + // accept a message via DMTP (to trillian) + try (JunitSocketClient client = new JunitSocketClient(dmtpServerPort, err)) { + client.verify("ok DMTP"); + client.sendAndVerify("begin", "ok"); + client.sendAndVerify("from arthur@earth.planet", "ok"); + client.sendAndVerify("to unknown@earth.planet", "error unknown"); + client.sendAndVerify("quit", "ok bye"); + } + } + +} diff --git a/src/test/java/dslab/mailbox/MailboxServerTest.java b/src/test/java/dslab/mailbox/MailboxServerTest.java new file mode 100644 index 0000000..a89700f --- /dev/null +++ b/src/test/java/dslab/mailbox/MailboxServerTest.java @@ -0,0 +1,75 @@ +package dslab.mailbox; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.junit.Assert.assertThat; + +import java.net.SocketTimeoutException; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.Test; + +import dslab.ComponentFactory; +import dslab.Constants; +import dslab.Sockets; +import dslab.TestBase; +import dslab.monitoring.MonitoringServerTest; +import dslab.util.Config; + +/** + * MailboxServerTest. + */ +public class MailboxServerTest extends TestBase { + + private static final Log LOG = LogFactory.getLog(MonitoringServerTest.class); + + @Test + public void runAndShutdownTransferServer_createsAndStopsTcpSocketCorrectly() throws Exception { + String componentId = "mailbox-earth-planet"; + Config config = new Config(componentId); + + IMailboxServer component = ComponentFactory.createMailboxServer(componentId, in, out); + int dmtpPort = config.getInt("dmtp.tcp.port"); + int dmapPort = config.getInt("dmap.tcp.port"); + + assertThat(component, is(notNullValue())); + + Thread componentThread = new Thread(component); + LOG.info("Starting thread with component " + component); + componentThread.start(); + + try { + LOG.info("Waiting for DMTP socket to open on port " + dmtpPort); + Sockets.waitForSocket("localhost", dmtpPort, Constants.COMPONENT_STARTUP_WAIT); + } catch (SocketTimeoutException e) { + err.addError(new AssertionError("Expected a TCP server socket on port " + dmtpPort, e)); + } + + try { + LOG.info("Waiting for DMAP socket to open on port " + dmapPort); + Sockets.waitForSocket("localhost", dmapPort, Constants.COMPONENT_STARTUP_WAIT); + } catch (SocketTimeoutException e) { + err.addError(new AssertionError("Expected a TCP server socket on port " + dmapPort, e)); + } + + LOG.info("Shutting down component " + component); + in.addLine("shutdown"); // send "shutdown" command to command line + Thread.sleep(Constants.COMPONENT_TEARDOWN_WAIT); + + try { + LOG.info("Waiting for thread to stop for component " + component); + componentThread.join(); + } catch (InterruptedException e) { + err.addError(new AssertionError("Monitoring server was not terminated correctly")); + } + + + err.checkThat("Expected tcp socket on port " + dmtpPort + " to be closed after shutdown", + Sockets.isServerSocketOpen(dmtpPort), is(false)); + + err.checkThat("Expected tcp socket on port " + dmapPort + " to be closed after shutdown", + Sockets.isServerSocketOpen(dmapPort), is(false)); + } + +} diff --git a/src/test/java/dslab/mailbox/MailboxStartsecureTest.java b/src/test/java/dslab/mailbox/MailboxStartsecureTest.java new file mode 100644 index 0000000..6f2934c --- /dev/null +++ b/src/test/java/dslab/mailbox/MailboxStartsecureTest.java @@ -0,0 +1,77 @@ +package dslab.mailbox; + +import static dslab.StringMatches.matchesPattern; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import dslab.ComponentFactory; +import dslab.Constants; +import dslab.JunitSocketClient; +import dslab.Sockets; +import dslab.TestBase; +import dslab.util.Config; + +public class MailboxStartsecureTest extends TestBase { + + private static final Log LOG = LogFactory.getLog(MailboxServerProtocolTest.class); + + + private int dmapServerPort; + private int dmtpServerPort; + + @Before + public void setUp() throws Exception { + String componentId = "mailbox-earth-planet"; + + IMailboxServer component = ComponentFactory.createMailboxServer(componentId, in, out); + dmapServerPort = new Config(componentId).getInt("dmap.tcp.port"); + dmtpServerPort = new Config(componentId).getInt("dmtp.tcp.port"); + + new Thread(component).start(); + + LOG.info("Waiting for server sockets to appear"); + Sockets.waitForSocket("localhost", dmapServerPort, Constants.COMPONENT_STARTUP_WAIT); + Sockets.waitForSocket("localhost", dmtpServerPort, Constants.COMPONENT_STARTUP_WAIT); + } + + @After + public void tearDown() throws Exception { + in.addLine("shutdown"); // send "shutdown" command to command line + Thread.sleep(Constants.COMPONENT_TEARDOWN_WAIT); + } + + @Test(timeout = 15000) + public void sendStartsecure() throws Exception { + + // a challenge, aes secret and iv param encrypted with the server's RSA key + String testChallenge = "wTZqUdwD6RIWtgTrvoYecJgulKRQVActTzbaW7u4i0puTak8ymlUHmvVQGT6wCUVoByDaF3dEhRFku5uC4kap" + + "9yd2FntrtIcuftaf36WSU/Qg2ue254TiEVmCLILd2eef8SxHh6U0hyWwXPdD+BHBplzrBeIIiTPqLteKKHl6veEzuEh+s/u66hcy" + + "PG+3t18C4ZR1jo50VZhAa9Kfqeuj787llQTZMMv+2gEIRciKPu8pF5/57+hmOmcp+mAoBaK0XdjTZ1Win4bF1CP44sdHLgKy2Bfv" + + "Gn69RN7ThWBEu8fXuBsxcflhLDus1OIlDv8YgoLVGiOCamtZf0TtqcErg=="; + + try (JunitSocketClient client = new JunitSocketClient(dmapServerPort, err)) { + // protocol check + client.verify("ok DMAP2.0"); + + // check that mailbox returns its component id + client.sendAndVerify("startsecure", "ok mailbox-earth-planet"); + + // send the challenge + aes init + client.send(testChallenge); + + // response should be "ok " (which is AES encrypted and base64 encoded) + // specifically it should be g9UJxNFULO+H0otZoH5AVXoHv9TxJUEcbY/ScWoWMvcJYLz2lYBaZ16OtqEKtVk= + err.checkThat("Expected server response to be Base64 encoded", client.listen(), + matchesPattern("^(?:[a-zA-Z0-9+/]{4})*(?:[a-zA-Z0-9+/]{2}==|[a-zA-Z0-9+/]{3}=)?$")); + + // send encrypted "ok" (with the aes cipher) in + client.send("g9U="); + } + } + + +} diff --git a/src/test/java/dslab/monitoring/MonitoringServerProtocolTest.java b/src/test/java/dslab/monitoring/MonitoringServerProtocolTest.java new file mode 100644 index 0000000..a4ef39c --- /dev/null +++ b/src/test/java/dslab/monitoring/MonitoringServerProtocolTest.java @@ -0,0 +1,92 @@ +package dslab.monitoring; + +import static org.hamcrest.CoreMatchers.containsString; +import static org.junit.Assert.assertThat; + +import java.net.DatagramPacket; +import java.net.DatagramSocket; +import java.net.InetSocketAddress; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import dslab.ComponentFactory; +import dslab.Constants; +import dslab.TestBase; +import dslab.util.Config; + +/** + * Tests whether the UDP-based monitoring protocol is implemented correctly on the server side. + */ +public class MonitoringServerProtocolTest extends TestBase { + + private static final Log LOG = LogFactory.getLog(MonitoringServerProtocolTest.class); + + private String componentId = "monitoring"; + + private IMonitoringServer component; + private InetSocketAddress addr; + + @Before + public void setUp() throws Exception { + component = ComponentFactory.createMonitoringServer(componentId, in, out); + addr = new InetSocketAddress("127.0.0.1", new Config(componentId).getInt("udp.port")); + + new Thread(component).start(); + Thread.sleep(Constants.COMPONENT_STARTUP_WAIT); + } + + @After + public void tearDown() throws Exception { + in.addLine("shutdown"); + Thread.sleep(Constants.COMPONENT_TEARDOWN_WAIT); + } + + @Test(timeout = 15000) + public void addresses_returnsCorrectStatistics() throws Exception { + LOG.info("Sending three monitoring packets to monitoring socket"); + try (DatagramSocket socket = new DatagramSocket()) { + String str1 = "127.0.0.1:42 foo@example.com"; + String str2 = "127.0.0.1:43 foo@example.com"; + String str3 = "127.0.0.1:42 bar@example.com"; + + socket.send(new DatagramPacket(str1.getBytes(), str1.length(), addr)); + socket.send(new DatagramPacket(str2.getBytes(), str2.length(), addr)); + socket.send(new DatagramPacket(str3.getBytes(), str3.length(), addr)); + } + + Thread.sleep(2500); + in.addLine("addresses"); // send "addresses" command to command line + Thread.sleep(2500); + String output = String.join(",", out.getLines()); + assertThat(output, containsString("foo@example.com 2")); + assertThat(output, containsString("bar@example.com 1")); + } + + /* + * Assumes that run and shutdown works correctly. + */ + @Test(timeout = 15000) + public void servers_returnsCorrectStatistics() throws Exception { + LOG.info("Sending three monitoring packets to monitoring socket"); + try (DatagramSocket socket = new DatagramSocket()) { + String str1 = "127.0.0.1:42 foo@example.com"; + String str2 = "127.0.0.1:43 foo@example.com"; + String str3 = "127.0.0.1:42 bar@example.com"; + + socket.send(new DatagramPacket(str1.getBytes(), str1.length(), addr)); + socket.send(new DatagramPacket(str2.getBytes(), str2.length(), addr)); + socket.send(new DatagramPacket(str3.getBytes(), str3.length(), addr)); + } + + Thread.sleep(2500); + in.addLine("servers"); // send "addresses" command to command line + Thread.sleep(2500); + String output = String.join(",", out.getLines()); + assertThat(output, containsString("127.0.0.1:42 2")); + assertThat(output, containsString("127.0.0.1:43 1")); + } +} diff --git a/src/test/java/dslab/monitoring/MonitoringServerTest.java b/src/test/java/dslab/monitoring/MonitoringServerTest.java new file mode 100644 index 0000000..220511d --- /dev/null +++ b/src/test/java/dslab/monitoring/MonitoringServerTest.java @@ -0,0 +1,60 @@ +package dslab.monitoring; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.junit.Assert.assertThat; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.Test; + +import dslab.ComponentFactory; +import dslab.Constants; +import dslab.Sockets; +import dslab.TestBase; +import dslab.util.Config; + +/** + * Tests the creation, running, and shutting down of the monitoring server. + */ +public class MonitoringServerTest extends TestBase { + + private static final Log LOG = LogFactory.getLog(MonitoringServerTest.class); + + @Test + public void runAndShutdownMonitoringServer_createsAndStopsUdpSocketCorrectly() throws Exception { + IMonitoringServer component = ComponentFactory.createMonitoringServer("monitoring", in, out); + int port = new Config("monitoring").getInt("udp.port"); + + assertThat(component, is(notNullValue())); + + Thread componentThread = new Thread(component); + LOG.info("Starting thread with component " + component); + componentThread.start(); + + Thread.sleep(Constants.COMPONENT_STARTUP_WAIT); // wait a bit for resources to be initialized + + try { + LOG.info("Trying to create socket on port " + port); + err.checkThat("Expected an open UDP socket on port " + port, Sockets.isDatagramSocketOpen(port), is(true)); + } catch (Exception e) { + // a different unexpected error occurred (unlikely) + err.addError(e); + } + + LOG.info("Shutting down component " + component); + in.addLine("shutdown"); // send "shutdown" command to command line + Thread.sleep(Constants.COMPONENT_TEARDOWN_WAIT); + + try { + LOG.info("Waiting for thread to stop for component " + component); + componentThread.join(); + } catch (InterruptedException e) { + err.addError(new AssertionError("Monitoring server was not terminated correctly")); + } + + err.checkThat("Expected datagram socket on port " + port + " to be closed after shutdown", + Sockets.isDatagramSocketOpen(port), is(false)); + } + +} diff --git a/src/test/java/dslab/naming/NameserverTest.java b/src/test/java/dslab/naming/NameserverTest.java new file mode 100644 index 0000000..7ed73a8 --- /dev/null +++ b/src/test/java/dslab/naming/NameserverTest.java @@ -0,0 +1,209 @@ +package dslab.naming; + +import static org.hamcrest.CoreMatchers.allOf; +import static org.hamcrest.CoreMatchers.containsString; +import static org.hamcrest.CoreMatchers.instanceOf; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.not; +import static org.hamcrest.CoreMatchers.nullValue; + +import java.rmi.NotBoundException; +import java.rmi.Remote; +import java.rmi.RemoteException; +import java.rmi.registry.LocateRegistry; +import java.rmi.registry.Registry; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.Before; +import org.junit.FixMethodOrder; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ErrorCollector; +import org.junit.runners.MethodSorters; + +import dslab.ComponentFactory; +import dslab.Constants; +import dslab.TestInputStream; +import dslab.TestOutputStream; +import dslab.nameserver.INameserverRemote; +import dslab.util.Config; + +@FixMethodOrder(MethodSorters.NAME_ASCENDING) +public class NameserverTest { + + private static final Log LOG = LogFactory.getLog(NameserverTest.class); + + @Rule + public ErrorCollector err = new ErrorCollector(); + + private TestInputStream nsRootIn; + private TestOutputStream nsRootOut; + + private Config nsPlanetConfig; + private TestInputStream nsPlanetIn; + private TestOutputStream nsPlanetOut; + + private static void sendShutdown(TestInputStream in) { + try { + LOG.info("Sending shutdown to component component"); + in.addLine("shutdown"); + Thread.sleep(Constants.COMPONENT_TEARDOWN_WAIT); + } catch (InterruptedException e) { + LOG.error("Interrupted while waiting on component teardown"); + throw new RuntimeException(e); + } + } + + @Before + public void setUp() throws Exception { + this.nsRootIn = new TestInputStream(); + this.nsPlanetIn = new TestInputStream(); + this.nsRootOut = new TestOutputStream(); + this.nsPlanetOut = new TestOutputStream(); + + this.nsPlanetConfig = new Config("ns-planet"); + } + + @Test(timeout = 15000) + public void ns01_startAndShutdownRootNameserver_createsAndUnexportsRegistryCorrectly() throws Exception { + Runnable nsRoot = ComponentFactory.createNameserver("ns-root", nsRootIn, nsRootOut); + + LOG.info("Starting ns-root thread"); + Thread nsRootThread = new Thread(nsRoot); + nsRootThread.start(); + + Thread.sleep(Constants.COMPONENT_STARTUP_WAIT); + try { + Registry registry = LocateRegistry.getRegistry(nsPlanetConfig.getString("registry.host"), nsPlanetConfig.getInt("registry.port")); + registry.list(); + } catch (RemoteException e) { + err.addError(new AssertionError("Expected root nameserver to start a registry, but it couldn't be located or registry.list() failed", e)); + } finally { + sendShutdown(nsRootIn); + + try { + Registry registry = LocateRegistry.getRegistry(nsPlanetConfig.getString("registry.host"), nsPlanetConfig.getInt("registry.port")); + registry.list(); + err.addError(new AssertionError("Expected root nameserver to shut down the registry, but could call list")); + } catch (RemoteException e) { + // ok + } catch (Exception e) { + err.addError(e); + } + } + + } + + @Test(timeout = 15000) + public void ns02_startRootNameserver_registersRemoteObjectCorrectly() throws Exception { + Runnable nsRoot = ComponentFactory.createNameserver("ns-root", nsRootIn, nsRootOut); + + LOG.info("Starting ns-root thread"); + Thread nsRootThread = new Thread(nsRoot); + nsRootThread.start(); + + String id = nsPlanetConfig.getString("root_id"); + try { + Thread.sleep(Constants.COMPONENT_STARTUP_WAIT); + Registry registry = LocateRegistry.getRegistry(nsPlanetConfig.getString("registry.host"), nsPlanetConfig.getInt("registry.port")); + + LOG.info("Looking up " + id + " in registry"); + Remote remote = registry.lookup(id); + err.checkThat("Remote object bound to " + id + " should be a INameserverRemote", remote, instanceOf(INameserverRemote.class)); + + String[] list = registry.list(); + err.checkThat("Registry should only contain a single remote object (the root nameserver)", list.length, is(1)); + } catch (RemoteException | NotBoundException e) { + err.addError(new AssertionError("Error while looking up remote object " + "")); + } finally { + sendShutdown(nsRootIn); + } + } + + @Test(timeout = 30000) + public void ns03_startingZoneNameserver_registersNameserverCorrectly() throws Exception { + Runnable nsRoot = ComponentFactory.createNameserver("ns-root", nsRootIn, nsRootOut); + + LOG.info("Starting ns-root thread"); + Thread nsRootThread = new Thread(nsRoot); + nsRootThread.start(); + Thread.sleep(Constants.COMPONENT_STARTUP_WAIT); + + LOG.info("Starting ns-planet thread"); + Runnable nsPlanet = ComponentFactory.createNameserver("ns-planet", nsPlanetIn, nsPlanetOut); + Thread nsPlanetThread = new Thread(nsPlanet); + nsPlanetThread.start(); + Thread.sleep(Constants.COMPONENT_STARTUP_WAIT); + + try { + // lookup registry and root remote + Registry registry = LocateRegistry.getRegistry(nsPlanetConfig.getString("registry.host"), nsPlanetConfig.getInt("registry.port")); + + err.checkThat("Adding a new nameserver should not bind an additional remote object to the registry", registry.list().length, is(1)); + + String id = nsPlanetConfig.getString("root_id"); + LOG.info("Looking up " + id + " in registry"); + INameserverRemote root = (INameserverRemote) registry.lookup(id); // from ns02 we assume that this has the correct type + + // check the nameserver remote + LOG.info("Getting nameserver 'planet' from server remote"); + Remote zone = root.getNameserver("planet"); + + err.checkThat(zone, not(nullValue())); + + // read nameservers from ns-root's command line + LOG.info("Sending 'nameservers' command"); + nsRootIn.addLine("nameservers"); + String output = nsRootOut.listen(); + LOG.info("Got output: " + output); + err.checkThat("output of 'nameservers' command should contain the domain", output, containsString("planet")); + } finally { + // shutdown + sendShutdown(nsPlanetIn); + sendShutdown(nsRootIn); + } + } + + @Test(timeout = 30000) + public void ns04_registerAndLookupMailboxServer_registersAndReturnsAddressCorrectly() throws Exception { + Runnable nsRoot = ComponentFactory.createNameserver("ns-root", nsRootIn, nsRootOut); + + LOG.info("Starting ns-root thread"); + Thread nsRootThread = new Thread(nsRoot); + nsRootThread.start(); + Thread.sleep(Constants.COMPONENT_STARTUP_WAIT); + + LOG.info("Starting ns-planet thread"); + Runnable nsPlanet = ComponentFactory.createNameserver("ns-planet", nsPlanetIn, nsPlanetOut); + Thread nsPlanetThread = new Thread(nsPlanet); + nsPlanetThread.start(); + Thread.sleep(Constants.COMPONENT_STARTUP_WAIT); + + try { + // lookup registry and root remote + Registry registry = LocateRegistry.getRegistry(nsPlanetConfig.getString("registry.host"), nsPlanetConfig.getInt("registry.port")); + + String id = nsPlanetConfig.getString("root_id"); + LOG.info("Looking up " + id + " in registry"); + INameserverRemote root = (INameserverRemote) registry.lookup(id); // from ns02 we assume that this has the correct type + + // registration + LOG.info("Registering mailbox server for @mars.planet mail domain"); + root.registerMailboxServer("mars.planet", "192.168.0.1:14242"); + + Thread.sleep(1000); + + INameserverRemote zone = root.getNameserver("planet"); + LOG.info("Looking up 'mars' at nameserver planet"); + String address = zone.lookup("mars"); + + err.checkThat("registered address should contain both address and port", address, allOf(containsString("192.168.0.1"), containsString("14242"))); + + } finally { + // shutdown + sendShutdown(nsPlanetIn); + sendShutdown(nsRootIn); + } + } +} diff --git a/src/test/java/dslab/transfer/TransferServerProtocolTest.java b/src/test/java/dslab/transfer/TransferServerProtocolTest.java new file mode 100644 index 0000000..ef2c139 --- /dev/null +++ b/src/test/java/dslab/transfer/TransferServerProtocolTest.java @@ -0,0 +1,71 @@ +package dslab.transfer; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import dslab.ComponentFactory; +import dslab.Constants; +import dslab.JunitSocketClient; +import dslab.Sockets; +import dslab.TestBase; +import dslab.util.Config; + +/** + * TransferServerProtocolTest. + */ +public class TransferServerProtocolTest extends TestBase { + + private static final Log LOG = LogFactory.getLog(TransferServerProtocolTest.class); + + private String componentId = "transfer-1"; + + private ITransferServer component; + private int serverPort; + + @Before + public void setUp() throws Exception { + component = ComponentFactory.createTransferServer(componentId, in, out); + serverPort = new Config(componentId).getInt("tcp.port"); + new Thread(component).start(); + + LOG.info("Waiting for server socket to appear"); + Sockets.waitForSocket("localhost", serverPort, Constants.COMPONENT_STARTUP_WAIT); + } + + @After + public void tearDown() throws Exception { + in.addLine("shutdown"); // send "shutdown" command to command line + Thread.sleep(Constants.COMPONENT_TEARDOWN_WAIT); + } + + @Test(timeout = 15000) + public void defaultDmtpInteractionTest() throws Exception { + try (JunitSocketClient client = new JunitSocketClient(serverPort, err)) { + client.verify("ok DMTP"); + client.sendAndVerify("begin", "ok"); + client.sendAndVerify("from trillian@earth.planet", "ok"); + client.sendAndVerify("to arthur@earth.planet", "ok 1"); + client.sendAndVerify("subject hello", "ok"); + client.sendAndVerify("data hello from junit", "ok"); + client.sendAndVerify("send", "ok"); + client.sendAndVerify("quit", "ok bye"); + } + } + + @Test(timeout = 15000) + public void sendWithoutRecipient_returnsErrorOnSend() throws Exception { + try (JunitSocketClient client = new JunitSocketClient(serverPort, err)) { + client.verify("ok DMTP"); + client.sendAndVerify("begin", "ok"); + client.sendAndVerify("from trillian@earth.planet", "ok"); + client.sendAndVerify("subject hello", "ok"); + client.sendAndVerify("data hello from junit", "ok"); + client.sendAndVerify("send", "error"); + client.sendAndVerify("quit", "ok bye"); + } + } + +} diff --git a/src/test/java/dslab/transfer/TransferServerTest.java b/src/test/java/dslab/transfer/TransferServerTest.java new file mode 100644 index 0000000..30d7be4 --- /dev/null +++ b/src/test/java/dslab/transfer/TransferServerTest.java @@ -0,0 +1,60 @@ +package dslab.transfer; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.junit.Assert.assertThat; + +import java.net.SocketTimeoutException; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.Test; + +import dslab.ComponentFactory; +import dslab.Constants; +import dslab.Sockets; +import dslab.TestBase; +import dslab.monitoring.MonitoringServerTest; +import dslab.util.Config; + +/** + * TransferServerTest. + */ +public class TransferServerTest extends TestBase { + + private static final Log LOG = LogFactory.getLog(MonitoringServerTest.class); + + @Test + public void runAndShutdownTransferServer_createsAndStopsTcpSocketCorrectly() throws Exception { + ITransferServer component = ComponentFactory.createTransferServer("transfer-1", in, out); + int port = new Config("transfer-1").getInt("tcp.port"); + + assertThat(component, is(notNullValue())); + + Thread componentThread = new Thread(component); + LOG.info("Starting thread with component " + component); + componentThread.start(); + + try { + LOG.info("Waiting for socket to open on port " + port); + Sockets.waitForSocket("localhost", port, Constants.COMPONENT_STARTUP_WAIT); + } catch (SocketTimeoutException e) { + err.addError(new AssertionError("Expected a TCP server socket on port " + port, e)); + } + + LOG.info("Shutting down component " + component); + in.addLine("shutdown"); // send "shutdown" command to command line + Thread.sleep(Constants.COMPONENT_TEARDOWN_WAIT); + + try { + LOG.info("Waiting for thread to stop for component " + component); + componentThread.join(); + } catch (InterruptedException e) { + err.addError(new AssertionError("Monitoring server was not terminated correctly")); + } + + err.checkThat("Expected tcp socket on port " + port + " to be closed after shutdown", + Sockets.isServerSocketOpen(port), is(false)); + } + +} diff --git a/src/test/resources/.gitkeep b/src/test/resources/.gitkeep new file mode 100644 index 0000000..e69de29