diff --git a/.mill-version b/.mill-version index a3df0a69..7e310bae 100644 --- a/.mill-version +++ b/.mill-version @@ -1 +1 @@ -0.8.0 +0.9.9 diff --git a/README.md b/README.md index 933a9e50..a9850d68 100644 --- a/README.md +++ b/README.md @@ -55,10 +55,11 @@ mill __.test mill --watch metronome[2.13.4].rocksdb.test ``` -To run a single test class, use the `.single` method with the full path to the spec: +To run a single test class, use the `.single` method with the full path to the spec. Note that `ScalaTest` tests are in the `specs` subdirectories while `ScalaCheck` ones are in `props`. ```console -mill __.storage.test.single io.iohk.metronome.storage.KVStoreStateSpec +mill __.storage.specs.single io.iohk.metronome.storage.KVStoreStateSpec +mill __.hotstuff.consensus.props.single io.iohk.metronome.hotstuff.consensus.basic.ProtocolStateProps ``` To experiment with the code, start an interactive session: @@ -67,6 +68,12 @@ To experiment with the code, start an interactive session: mill -i metronome[2.13.4].hotstuff.consensus.console ``` +### Versions + +You will need Java 11 to build. + +The `mill` version is set in the `.mill-version` file or the `MILL_VERSION` env var. To build with Nix in sandbox environment, it's best to make sure that the build works with the version that Nix comes with, because after [this update](https://github.com/NixOS/nixpkgs/pull/130823) it's not going to dynamically download the one set in the project. + ### Formatting the codebase Please configure your editor to use `scalafmt` on save. CI will be configured to check formatting. diff --git a/build.sc b/build.sc index d59ee9d8..41edff5f 100644 --- a/build.sc +++ b/build.sc @@ -122,11 +122,16 @@ class MetronomeModule(val crossScalaVersion: String) extends CrossScalaModule { override def scalacOptions = SubModule.this.scalacOptions - override def testFrameworks = - Seq( - "org.scalatest.tools.Framework", - "org.scalacheck.ScalaCheckFramework" - ) + // Test modules might depend on each other for example to get `Arbitrary` instances. + def testModuleDeps: Seq[JavaModule] = Seq.empty + + override def moduleDeps: Seq[JavaModule] = + super.moduleDeps ++ testModuleDeps + } + + // Since mill 0.9.7 there can be only one `testFramework` per module. + trait SpecsModule extends TestModule { + override def testFramework = "org.scalatest.tools.Framework" // It may be useful to see logs in tests. override def moduleDeps: Seq[JavaModule] = @@ -137,17 +142,25 @@ class MetronomeModule(val crossScalaVersion: String) extends CrossScalaModule { // Alternatively, capture logs in memory with `InMemoryLogTracer`. override def ivyDeps = Agg( ivy"org.scalatest::scalatest:${VersionOf.scalatest}", - ivy"org.scalacheck::scalacheck:${VersionOf.scalacheck}", ivy"ch.qos.logback:logback-classic:${VersionOf.logback}" ) def single(args: String*) = T.command { - // ScalaCheck test - if (args.headOption.exists(_.endsWith("Props"))) - super.runMain(args.head, args.tail: _*) // ScalaTest test - else - super.runMain("org.scalatest.run", args: _*) + super.runMain("org.scalatest.run", args: _*) + } + } + + trait PropsModule extends TestModule { + override def testFramework = "org.scalacheck.ScalaCheckFramework" + + override def ivyDeps = Agg( + ivy"org.scalacheck::scalacheck:${VersionOf.scalacheck}" + ) + + def single(args: String*) = T.command { + // ScalaCheck test + super.runMain(args.head, args.tail: _*) } } } @@ -162,7 +175,7 @@ class MetronomeModule(val crossScalaVersion: String) extends CrossScalaModule { ivy"io.monix::monix:${VersionOf.monix}" ) - object test extends TestModule + object specs extends SpecsModule } /** Storage abstractions, e.g. a generic key-value store. */ @@ -173,7 +186,7 @@ class MetronomeModule(val crossScalaVersion: String) extends CrossScalaModule { ivy"org.scodec::scodec-core:${VersionOf.`scodec-core`}" ) - object test extends TestModule + object specs extends SpecsModule } /** Emit trace events, abstracting away logs and metrics. @@ -203,7 +216,7 @@ class MetronomeModule(val crossScalaVersion: String) extends CrossScalaModule { ivy"org.scodec::scodec-core:${VersionOf.`scodec-core`}" ) - object test extends TestModule + object specs extends SpecsModule } /** Generic Peer-to-Peer components that can multiplex protocols @@ -220,10 +233,7 @@ class MetronomeModule(val crossScalaVersion: String) extends CrossScalaModule { ivy"io.iohk::scalanet:${VersionOf.scalanet}" ) - object test extends TestModule { - override def moduleDeps: Seq[JavaModule] = - super.moduleDeps ++ Seq(logging) - } + object specs extends SpecsModule } /** General configuration parser, to be used by application modules. */ @@ -234,7 +244,7 @@ class MetronomeModule(val crossScalaVersion: String) extends CrossScalaModule { ivy"io.circe::circe-parser:${VersionOf.circe}" ) - object test extends TestModule { + object specs extends SpecsModule { override def ivyDeps = super.ivyDeps() ++ Agg( ivy"io.circe::circe-generic:${VersionOf.circe}" ) @@ -254,7 +264,8 @@ class MetronomeModule(val crossScalaVersion: String) extends CrossScalaModule { override def moduleDeps: Seq[PublishModule] = Seq(core, crypto) - object test extends TestModule + object props extends PropsModule + object specs extends SpecsModule } /** Expose forensics events via tracing. */ @@ -275,10 +286,10 @@ class MetronomeModule(val crossScalaVersion: String) extends CrossScalaModule { hotstuff.forensics ) - object test extends TestModule { - override def moduleDeps: Seq[JavaModule] = - super.moduleDeps ++ Seq(hotstuff.consensus.test) + object props extends PropsModule { + override def testModuleDeps = Seq(hotstuff.consensus.props) } + object specs extends SpecsModule } } @@ -300,9 +311,11 @@ class MetronomeModule(val crossScalaVersion: String) extends CrossScalaModule { override def moduleDeps: Seq[PublishModule] = Seq(core, crypto, hotstuff.consensus) - object test extends TestModule { - override def moduleDeps: Seq[JavaModule] = - super.moduleDeps ++ Seq(hotstuff.consensus.test) + object props extends PropsModule { + override def testModuleDeps = Seq(hotstuff.consensus.props) + } + object specs extends SpecsModule { + override def testModuleDeps = Seq(checkpointing.models.props) } } @@ -321,10 +334,10 @@ class MetronomeModule(val crossScalaVersion: String) extends CrossScalaModule { override def moduleDeps: Seq[PublishModule] = Seq(tracing, crypto, networking, checkpointing.models) - object test extends TestModule { - override def moduleDeps: Seq[JavaModule] = - super.moduleDeps ++ Seq(checkpointing.models.test) + object props extends PropsModule { + override def testModuleDeps = Seq(checkpointing.models.props) } + object specs extends SpecsModule } /** Implements the checkpointing functionality, validation rules, @@ -345,13 +358,16 @@ class MetronomeModule(val crossScalaVersion: String) extends CrossScalaModule { checkpointing.interpreter ) - object test extends TestModule { + object props extends PropsModule { override def moduleDeps: Seq[JavaModule] = super.moduleDeps ++ Seq( - checkpointing.models.test, - hotstuff.service.test + checkpointing.models.props, + hotstuff.service.props ) } + object specs extends SpecsModule { + override def testModuleDeps = Seq(checkpointing.models.props) + } } /** Executable application for running HotStuff and checkpointing as a stand-alone process, @@ -372,8 +388,6 @@ class MetronomeModule(val crossScalaVersion: String) extends CrossScalaModule { ivy"ch.qos.logback:logback-classic:${VersionOf.logback}", ivy"io.iohk::scalanet-discovery:${VersionOf.scalanet}" ) - - object test extends TestModule } } @@ -412,7 +426,7 @@ class MetronomeModule(val crossScalaVersion: String) extends CrossScalaModule { ivy"org.rocksdb:rocksdbjni:${VersionOf.rocksdb}" ) - object test extends TestModule { + object props extends PropsModule { override def ivyDeps = super.ivyDeps() ++ Agg( ivy"io.monix::monix:${VersionOf.monix}" ) diff --git a/metronome/checkpointing/interpreter/test/src/io/iohk/metronome/checkpointing/interpreter/codecs/DefaultInterpreterCodecsProps.scala b/metronome/checkpointing/interpreter/props/src/io/iohk/metronome/checkpointing/interpreter/codecs/DefaultInterpreterCodecsProps.scala similarity index 100% rename from metronome/checkpointing/interpreter/test/src/io/iohk/metronome/checkpointing/interpreter/codecs/DefaultInterpreterCodecsProps.scala rename to metronome/checkpointing/interpreter/props/src/io/iohk/metronome/checkpointing/interpreter/codecs/DefaultInterpreterCodecsProps.scala diff --git a/metronome/checkpointing/interpreter/test/src/io/iohk/metronome/checkpointing/interpreter/messages/ArbitraryInstances.scala b/metronome/checkpointing/interpreter/props/src/io/iohk/metronome/checkpointing/interpreter/messages/ArbitraryInstances.scala similarity index 100% rename from metronome/checkpointing/interpreter/test/src/io/iohk/metronome/checkpointing/interpreter/messages/ArbitraryInstances.scala rename to metronome/checkpointing/interpreter/props/src/io/iohk/metronome/checkpointing/interpreter/messages/ArbitraryInstances.scala diff --git a/metronome/checkpointing/interpreter/test/resources/logback-test.xml b/metronome/checkpointing/interpreter/specs/resources/logback-test.xml similarity index 100% rename from metronome/checkpointing/interpreter/test/resources/logback-test.xml rename to metronome/checkpointing/interpreter/specs/resources/logback-test.xml diff --git a/metronome/checkpointing/interpreter/test/src/io/iohk/metronome/checkpointing/interpreter/InterpreterServiceSpec.scala b/metronome/checkpointing/interpreter/specs/src/io/iohk/metronome/checkpointing/interpreter/InterpreterServiceSpec.scala similarity index 100% rename from metronome/checkpointing/interpreter/test/src/io/iohk/metronome/checkpointing/interpreter/InterpreterServiceSpec.scala rename to metronome/checkpointing/interpreter/specs/src/io/iohk/metronome/checkpointing/interpreter/InterpreterServiceSpec.scala diff --git a/metronome/checkpointing/models/test/src/io/iohk/metronome/checkpointing/models/ArbitraryInstances.scala b/metronome/checkpointing/models/props/src/io/iohk/metronome/checkpointing/models/ArbitraryInstances.scala similarity index 100% rename from metronome/checkpointing/models/test/src/io/iohk/metronome/checkpointing/models/ArbitraryInstances.scala rename to metronome/checkpointing/models/props/src/io/iohk/metronome/checkpointing/models/ArbitraryInstances.scala diff --git a/metronome/checkpointing/models/test/src/io/iohk/metronome/checkpointing/models/LedgerProps.scala b/metronome/checkpointing/models/props/src/io/iohk/metronome/checkpointing/models/LedgerProps.scala similarity index 100% rename from metronome/checkpointing/models/test/src/io/iohk/metronome/checkpointing/models/LedgerProps.scala rename to metronome/checkpointing/models/props/src/io/iohk/metronome/checkpointing/models/LedgerProps.scala diff --git a/metronome/checkpointing/models/test/src/io/iohk/metronome/checkpointing/models/MerkleTreeProps.scala b/metronome/checkpointing/models/props/src/io/iohk/metronome/checkpointing/models/MerkleTreeProps.scala similarity index 100% rename from metronome/checkpointing/models/test/src/io/iohk/metronome/checkpointing/models/MerkleTreeProps.scala rename to metronome/checkpointing/models/props/src/io/iohk/metronome/checkpointing/models/MerkleTreeProps.scala diff --git a/metronome/checkpointing/models/test/src/io/iohk/metronome/checkpointing/models/RLPCodecsProps.scala b/metronome/checkpointing/models/props/src/io/iohk/metronome/checkpointing/models/RLPCodecsProps.scala similarity index 100% rename from metronome/checkpointing/models/test/src/io/iohk/metronome/checkpointing/models/RLPCodecsProps.scala rename to metronome/checkpointing/models/props/src/io/iohk/metronome/checkpointing/models/RLPCodecsProps.scala diff --git a/metronome/checkpointing/models/test/resources/golden/RLPCodec[CheckpointCertificate].rlp b/metronome/checkpointing/models/specs/resources/golden/RLPCodec[CheckpointCertificate].rlp similarity index 100% rename from metronome/checkpointing/models/test/resources/golden/RLPCodec[CheckpointCertificate].rlp rename to metronome/checkpointing/models/specs/resources/golden/RLPCodec[CheckpointCertificate].rlp diff --git a/metronome/checkpointing/models/test/resources/golden/RLPCodec[CheckpointCertificate].txt b/metronome/checkpointing/models/specs/resources/golden/RLPCodec[CheckpointCertificate].txt similarity index 100% rename from metronome/checkpointing/models/test/resources/golden/RLPCodec[CheckpointCertificate].txt rename to metronome/checkpointing/models/specs/resources/golden/RLPCodec[CheckpointCertificate].txt diff --git a/metronome/checkpointing/models/test/resources/golden/RLPCodec[Ledger].rlp b/metronome/checkpointing/models/specs/resources/golden/RLPCodec[Ledger].rlp similarity index 100% rename from metronome/checkpointing/models/test/resources/golden/RLPCodec[Ledger].rlp rename to metronome/checkpointing/models/specs/resources/golden/RLPCodec[Ledger].rlp diff --git a/metronome/checkpointing/models/test/resources/golden/RLPCodec[Ledger].txt b/metronome/checkpointing/models/specs/resources/golden/RLPCodec[Ledger].txt similarity index 100% rename from metronome/checkpointing/models/test/resources/golden/RLPCodec[Ledger].txt rename to metronome/checkpointing/models/specs/resources/golden/RLPCodec[Ledger].txt diff --git a/metronome/checkpointing/models/test/resources/golden/RLPCodec[Transaction].rlp b/metronome/checkpointing/models/specs/resources/golden/RLPCodec[Transaction].rlp similarity index 100% rename from metronome/checkpointing/models/test/resources/golden/RLPCodec[Transaction].rlp rename to metronome/checkpointing/models/specs/resources/golden/RLPCodec[Transaction].rlp diff --git a/metronome/checkpointing/models/test/resources/golden/RLPCodec[Transaction].txt b/metronome/checkpointing/models/specs/resources/golden/RLPCodec[Transaction].txt similarity index 100% rename from metronome/checkpointing/models/test/resources/golden/RLPCodec[Transaction].txt rename to metronome/checkpointing/models/specs/resources/golden/RLPCodec[Transaction].txt diff --git a/metronome/checkpointing/models/test/src/io/iohk/metronome/checkpointing/CheckpointSigningSpec.scala b/metronome/checkpointing/models/specs/src/io/iohk/metronome/checkpointing/CheckpointSigningSpec.scala similarity index 100% rename from metronome/checkpointing/models/test/src/io/iohk/metronome/checkpointing/CheckpointSigningSpec.scala rename to metronome/checkpointing/models/specs/src/io/iohk/metronome/checkpointing/CheckpointSigningSpec.scala diff --git a/metronome/checkpointing/models/test/src/io/iohk/metronome/checkpointing/models/RLPCodecsSpec.scala b/metronome/checkpointing/models/specs/src/io/iohk/metronome/checkpointing/models/RLPCodecsSpec.scala similarity index 100% rename from metronome/checkpointing/models/test/src/io/iohk/metronome/checkpointing/models/RLPCodecsSpec.scala rename to metronome/checkpointing/models/specs/src/io/iohk/metronome/checkpointing/models/RLPCodecsSpec.scala diff --git a/metronome/checkpointing/service/test/src/io/iohk/metronome/checkpointing/service/CheckpointingServiceProps.scala b/metronome/checkpointing/service/props/src/io/iohk/metronome/checkpointing/service/CheckpointingServiceProps.scala similarity index 100% rename from metronome/checkpointing/service/test/src/io/iohk/metronome/checkpointing/service/CheckpointingServiceProps.scala rename to metronome/checkpointing/service/props/src/io/iohk/metronome/checkpointing/service/CheckpointingServiceProps.scala diff --git a/metronome/checkpointing/service/test/src/io/iohk/metronome/checkpointing/service/storage/LedgerStorageProps.scala b/metronome/checkpointing/service/props/src/io/iohk/metronome/checkpointing/service/storage/LedgerStorageProps.scala similarity index 100% rename from metronome/checkpointing/service/test/src/io/iohk/metronome/checkpointing/service/storage/LedgerStorageProps.scala rename to metronome/checkpointing/service/props/src/io/iohk/metronome/checkpointing/service/storage/LedgerStorageProps.scala diff --git a/metronome/checkpointing/service/test/src/io/iohk/metronome/checkpointing/service/InterpreterClientSpec.scala b/metronome/checkpointing/service/specs/src/io/iohk/metronome/checkpointing/service/InterpreterClientSpec.scala similarity index 100% rename from metronome/checkpointing/service/test/src/io/iohk/metronome/checkpointing/service/InterpreterClientSpec.scala rename to metronome/checkpointing/service/specs/src/io/iohk/metronome/checkpointing/service/InterpreterClientSpec.scala diff --git a/metronome/config/test/resources/complex.conf b/metronome/config/specs/resources/complex.conf similarity index 100% rename from metronome/config/test/resources/complex.conf rename to metronome/config/specs/resources/complex.conf diff --git a/metronome/config/test/resources/override.conf b/metronome/config/specs/resources/override.conf similarity index 100% rename from metronome/config/test/resources/override.conf rename to metronome/config/specs/resources/override.conf diff --git a/metronome/config/test/resources/simple.conf b/metronome/config/specs/resources/simple.conf similarity index 100% rename from metronome/config/test/resources/simple.conf rename to metronome/config/specs/resources/simple.conf diff --git a/metronome/config/test/src/io/iohk/metronome/config/ConfigParserSpec.scala b/metronome/config/specs/src/io/iohk/metronome/config/ConfigParserSpec.scala similarity index 100% rename from metronome/config/test/src/io/iohk/metronome/config/ConfigParserSpec.scala rename to metronome/config/specs/src/io/iohk/metronome/config/ConfigParserSpec.scala diff --git a/metronome/core/test/src/io/iohk/metronome/core/PipeSpec.scala b/metronome/core/specs/src/io/iohk/metronome/core/PipeSpec.scala similarity index 100% rename from metronome/core/test/src/io/iohk/metronome/core/PipeSpec.scala rename to metronome/core/specs/src/io/iohk/metronome/core/PipeSpec.scala diff --git a/metronome/core/test/src/io/iohk/metronome/core/fibers/FiberMapSpec.scala b/metronome/core/specs/src/io/iohk/metronome/core/fibers/FiberMapSpec.scala similarity index 100% rename from metronome/core/test/src/io/iohk/metronome/core/fibers/FiberMapSpec.scala rename to metronome/core/specs/src/io/iohk/metronome/core/fibers/FiberMapSpec.scala diff --git a/metronome/core/test/src/io/iohk/metronome/core/fibers/FiberSetSpec.scala b/metronome/core/specs/src/io/iohk/metronome/core/fibers/FiberSetSpec.scala similarity index 100% rename from metronome/core/test/src/io/iohk/metronome/core/fibers/FiberSetSpec.scala rename to metronome/core/specs/src/io/iohk/metronome/core/fibers/FiberSetSpec.scala diff --git a/metronome/core/test/src/io/iohk/metronome/core/messages/RPCTrackerSpec.scala b/metronome/core/specs/src/io/iohk/metronome/core/messages/RPCTrackerSpec.scala similarity index 100% rename from metronome/core/test/src/io/iohk/metronome/core/messages/RPCTrackerSpec.scala rename to metronome/core/specs/src/io/iohk/metronome/core/messages/RPCTrackerSpec.scala diff --git a/metronome/crypto/test/src/io/iohk/metronome/crypto/hash/Keccak256Spec.scala b/metronome/crypto/specs/src/io/iohk/metronome/crypto/hash/Keccak256Spec.scala similarity index 100% rename from metronome/crypto/test/src/io/iohk/metronome/crypto/hash/Keccak256Spec.scala rename to metronome/crypto/specs/src/io/iohk/metronome/crypto/hash/Keccak256Spec.scala diff --git a/metronome/hotstuff/consensus/test/src/io/iohk/metronome/hotstuff/consensus/ArbitraryInstances.scala b/metronome/hotstuff/consensus/props/src/io/iohk/metronome/hotstuff/consensus/ArbitraryInstances.scala similarity index 100% rename from metronome/hotstuff/consensus/test/src/io/iohk/metronome/hotstuff/consensus/ArbitraryInstances.scala rename to metronome/hotstuff/consensus/props/src/io/iohk/metronome/hotstuff/consensus/ArbitraryInstances.scala diff --git a/metronome/hotstuff/consensus/test/src/io/iohk/metronome/hotstuff/consensus/LeaderSelectionProps.scala b/metronome/hotstuff/consensus/props/src/io/iohk/metronome/hotstuff/consensus/LeaderSelectionProps.scala similarity index 100% rename from metronome/hotstuff/consensus/test/src/io/iohk/metronome/hotstuff/consensus/LeaderSelectionProps.scala rename to metronome/hotstuff/consensus/props/src/io/iohk/metronome/hotstuff/consensus/LeaderSelectionProps.scala diff --git a/metronome/hotstuff/consensus/test/src/io/iohk/metronome/hotstuff/consensus/basic/ProtocolStateProps.scala b/metronome/hotstuff/consensus/props/src/io/iohk/metronome/hotstuff/consensus/basic/ProtocolStateProps.scala similarity index 100% rename from metronome/hotstuff/consensus/test/src/io/iohk/metronome/hotstuff/consensus/basic/ProtocolStateProps.scala rename to metronome/hotstuff/consensus/props/src/io/iohk/metronome/hotstuff/consensus/basic/ProtocolStateProps.scala diff --git a/metronome/hotstuff/consensus/test/src/io/iohk/metronome/hotstuff/consensus/basic/Secp256k1SigningProps.scala b/metronome/hotstuff/consensus/props/src/io/iohk/metronome/hotstuff/consensus/basic/Secp256k1SigningProps.scala similarity index 100% rename from metronome/hotstuff/consensus/test/src/io/iohk/metronome/hotstuff/consensus/basic/Secp256k1SigningProps.scala rename to metronome/hotstuff/consensus/props/src/io/iohk/metronome/hotstuff/consensus/basic/Secp256k1SigningProps.scala diff --git a/metronome/hotstuff/consensus/test/src/io/iohk/metronome/hotstuff/consensus/FederationSpec.scala b/metronome/hotstuff/consensus/specs/src/io/iohk/metronome/hotstuff/consensus/FederationSpec.scala similarity index 100% rename from metronome/hotstuff/consensus/test/src/io/iohk/metronome/hotstuff/consensus/FederationSpec.scala rename to metronome/hotstuff/consensus/specs/src/io/iohk/metronome/hotstuff/consensus/FederationSpec.scala diff --git a/metronome/hotstuff/service/test/src/io/iohk/metronome/hotstuff/service/execution/BlockExecutorProps.scala b/metronome/hotstuff/service/props/src/io/iohk/metronome/hotstuff/service/execution/BlockExecutorProps.scala similarity index 100% rename from metronome/hotstuff/service/test/src/io/iohk/metronome/hotstuff/service/execution/BlockExecutorProps.scala rename to metronome/hotstuff/service/props/src/io/iohk/metronome/hotstuff/service/execution/BlockExecutorProps.scala diff --git a/metronome/hotstuff/service/test/src/io/iohk/metronome/hotstuff/service/storage/BlockStorageProps.scala b/metronome/hotstuff/service/props/src/io/iohk/metronome/hotstuff/service/storage/BlockStorageProps.scala similarity index 100% rename from metronome/hotstuff/service/test/src/io/iohk/metronome/hotstuff/service/storage/BlockStorageProps.scala rename to metronome/hotstuff/service/props/src/io/iohk/metronome/hotstuff/service/storage/BlockStorageProps.scala diff --git a/metronome/hotstuff/service/test/src/io/iohk/metronome/hotstuff/service/storage/ViewStateStorageProps.scala b/metronome/hotstuff/service/props/src/io/iohk/metronome/hotstuff/service/storage/ViewStateStorageProps.scala similarity index 100% rename from metronome/hotstuff/service/test/src/io/iohk/metronome/hotstuff/service/storage/ViewStateStorageProps.scala rename to metronome/hotstuff/service/props/src/io/iohk/metronome/hotstuff/service/storage/ViewStateStorageProps.scala diff --git a/metronome/hotstuff/service/test/src/io/iohk/metronome/hotstuff/service/sync/BlockSynchronizerProps.scala b/metronome/hotstuff/service/props/src/io/iohk/metronome/hotstuff/service/sync/BlockSynchronizerProps.scala similarity index 100% rename from metronome/hotstuff/service/test/src/io/iohk/metronome/hotstuff/service/sync/BlockSynchronizerProps.scala rename to metronome/hotstuff/service/props/src/io/iohk/metronome/hotstuff/service/sync/BlockSynchronizerProps.scala diff --git a/metronome/hotstuff/service/test/src/io/iohk/metronome/hotstuff/service/sync/ViewSynchronizerProps.scala b/metronome/hotstuff/service/props/src/io/iohk/metronome/hotstuff/service/sync/ViewSynchronizerProps.scala similarity index 100% rename from metronome/hotstuff/service/test/src/io/iohk/metronome/hotstuff/service/sync/ViewSynchronizerProps.scala rename to metronome/hotstuff/service/props/src/io/iohk/metronome/hotstuff/service/sync/ViewSynchronizerProps.scala diff --git a/metronome/hotstuff/service/test/src/io/iohk/metronome/hotstuff/service/MessageStashSpec.scala b/metronome/hotstuff/service/specs/src/io/iohk/metronome/hotstuff/service/MessageStashSpec.scala similarity index 100% rename from metronome/hotstuff/service/test/src/io/iohk/metronome/hotstuff/service/MessageStashSpec.scala rename to metronome/hotstuff/service/specs/src/io/iohk/metronome/hotstuff/service/MessageStashSpec.scala diff --git a/metronome/networking/test/resources/logback-test.xml b/metronome/networking/specs/resources/logback-test.xml similarity index 100% rename from metronome/networking/test/resources/logback-test.xml rename to metronome/networking/specs/resources/logback-test.xml diff --git a/metronome/networking/test/src/io/iohk/metronome/networking/ConnectionHandlerSpec.scala b/metronome/networking/specs/src/io/iohk/metronome/networking/ConnectionHandlerSpec.scala similarity index 100% rename from metronome/networking/test/src/io/iohk/metronome/networking/ConnectionHandlerSpec.scala rename to metronome/networking/specs/src/io/iohk/metronome/networking/ConnectionHandlerSpec.scala diff --git a/metronome/networking/test/src/io/iohk/metronome/networking/MockEncryptedConnectionProvider.scala b/metronome/networking/specs/src/io/iohk/metronome/networking/MockEncryptedConnectionProvider.scala similarity index 100% rename from metronome/networking/test/src/io/iohk/metronome/networking/MockEncryptedConnectionProvider.scala rename to metronome/networking/specs/src/io/iohk/metronome/networking/MockEncryptedConnectionProvider.scala diff --git a/metronome/networking/test/src/io/iohk/metronome/networking/NetworkSpec.scala b/metronome/networking/specs/src/io/iohk/metronome/networking/NetworkSpec.scala similarity index 100% rename from metronome/networking/test/src/io/iohk/metronome/networking/NetworkSpec.scala rename to metronome/networking/specs/src/io/iohk/metronome/networking/NetworkSpec.scala diff --git a/metronome/networking/test/src/io/iohk/metronome/networking/RemoteConnectionManagerTestUtils.scala b/metronome/networking/specs/src/io/iohk/metronome/networking/RemoteConnectionManagerTestUtils.scala similarity index 100% rename from metronome/networking/test/src/io/iohk/metronome/networking/RemoteConnectionManagerTestUtils.scala rename to metronome/networking/specs/src/io/iohk/metronome/networking/RemoteConnectionManagerTestUtils.scala diff --git a/metronome/networking/test/src/io/iohk/metronome/networking/RemoteConnectionManagerWithMockProviderSpec.scala b/metronome/networking/specs/src/io/iohk/metronome/networking/RemoteConnectionManagerWithMockProviderSpec.scala similarity index 100% rename from metronome/networking/test/src/io/iohk/metronome/networking/RemoteConnectionManagerWithMockProviderSpec.scala rename to metronome/networking/specs/src/io/iohk/metronome/networking/RemoteConnectionManagerWithMockProviderSpec.scala diff --git a/metronome/networking/test/src/io/iohk/metronome/networking/RemoteConnectionManagerWithScalanetProviderSpec.scala b/metronome/networking/specs/src/io/iohk/metronome/networking/RemoteConnectionManagerWithScalanetProviderSpec.scala similarity index 100% rename from metronome/networking/test/src/io/iohk/metronome/networking/RemoteConnectionManagerWithScalanetProviderSpec.scala rename to metronome/networking/specs/src/io/iohk/metronome/networking/RemoteConnectionManagerWithScalanetProviderSpec.scala diff --git a/metronome/rocksdb/test/src/io/iohk/metronome/rocksdb/RocksDBStoreProps.scala b/metronome/rocksdb/props/src/io/iohk/metronome/rocksdb/RocksDBStoreProps.scala similarity index 100% rename from metronome/rocksdb/test/src/io/iohk/metronome/rocksdb/RocksDBStoreProps.scala rename to metronome/rocksdb/props/src/io/iohk/metronome/rocksdb/RocksDBStoreProps.scala diff --git a/metronome/storage/test/src/io/iohk/metronome/storage/KVStoreStateSpec.scala b/metronome/storage/specs/src/io/iohk/metronome/storage/KVStoreStateSpec.scala similarity index 100% rename from metronome/storage/test/src/io/iohk/metronome/storage/KVStoreStateSpec.scala rename to metronome/storage/specs/src/io/iohk/metronome/storage/KVStoreStateSpec.scala