Skip to content

Commit 174fcdb

Browse files
committed
Fixed tests to be executed via sbt
1 parent 00fdb65 commit 174fcdb

15 files changed

Lines changed: 137 additions & 498 deletions

File tree

build.sbt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import xerial.sbt.Sonatype._
55
val scala211 = "2.11.12"
66
val scala212 = "2.12.4"
77

8+
parallelExecution in ThisBuild := false
9+
810
lazy val commonSettings = Seq(
911
organization := "io.swaydb",
1012
version := "0.1",

core/src/test/scala/swaydb/core/CommonAssertions.scala

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,12 @@ import org.scalatest.{Assertion, Assertions}
2626
import swaydb.core.data._
2727
import swaydb.core.level.zero.{LevelZero, LevelZeroRef}
2828
import swaydb.core.level.{Level, LevelRef}
29+
import swaydb.core.map.MapEntry
2930
import swaydb.core.map.MapEntry.{Add, Remove}
3031
import swaydb.core.map.serializer.MapSerializer
31-
import swaydb.core.map.{Map, MapEntry}
3232
import swaydb.core.segment.Segment
3333
import swaydb.core.segment.format.one.MatchResult.{Matched, Next, Stop}
3434
import swaydb.core.segment.format.one.{KeyMatcher, MatchResult, SegmentReader}
35-
import swaydb.data.TryAssert
3635
import swaydb.data.slice.{Reader, Slice}
3736
import swaydb.order.KeyOrder
3837

core/src/test/scala/swaydb/core/TestBase.scala

Lines changed: 8 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,14 @@ import java.util.concurrent.atomic.AtomicInteger
2626

2727
import org.scalatest.concurrent.Eventually
2828
import org.scalatest.{BeforeAndAfterAll, WordSpec}
29+
import swaydb.core.TestQueues._
2930
import swaydb.core.actor.TestActor
3031
import swaydb.core.data.{KeyValue, PersistentReadOnly}
3132
import swaydb.core.io.file.{DBFile, IO}
3233
import swaydb.core.io.reader.FileReader
3334
import swaydb.core.level.actor.LevelCommand.{PushSegments, PushSegmentsResponse}
3435
import swaydb.core.level.zero.LevelZero
3536
import swaydb.core.level.{Level, LevelRef}
36-
import swaydb.core.map.Map
3737
import swaydb.core.segment.Segment
3838
import swaydb.core.util.IDGenerator
3939
import swaydb.data.accelerate.{Accelerator, Level0Meter}
@@ -60,9 +60,9 @@ trait TestBase extends WordSpec with CommonAssertions with TestData with BeforeA
6060
val testMemoryFileDirectory = Paths.get(getClass.getClassLoader.getResource("").getPath).getParent.getParent.resolve("TEST_MEMORY_FILES")
6161

6262
//default setting, these can be overridden to apply different settings for test cases.
63-
def maxSegmentsOpen = 1000
6463

65-
def keyValuesCacheLimit: Int = 100.mb
64+
val levelReadRetryLimit = 100
65+
val levelZeroReadRetryLimit = 1000
6666

6767
def segmentSize: Long = 2.mb
6868

@@ -112,11 +112,6 @@ trait TestBase extends WordSpec with CommonAssertions with TestData with BeforeA
112112
else
113113
AppendixStorage.Persistent(mmap = appendixStorageMMAP, 4.mb)
114114

115-
lazy val keyValueLimiter = LimitQueues.keyValueLimiter(keyValuesCacheLimit, 10.seconds)
116-
lazy val fileOpenLimiter = LimitQueues.segmentOpenLimiter(maxSegmentsOpen, 10.seconds)
117-
val levelReadRetryLimit = 100
118-
val levelZeroReadRetryLimit = 1000
119-
120115
def persistent = levelStorage.persistent
121116

122117
def memory = levelStorage.memory
@@ -182,30 +177,16 @@ trait TestBase extends WordSpec with CommonAssertions with TestData with BeforeA
182177
FileVisitResult.CONTINUE
183178
}
184179
})
185-
//
186-
// sys.addShutdownHook {
187-
// walkDeleteFolder(testDir)
188-
// }
180+
181+
//
182+
// sys.addShutdownHook {
183+
// walkDeleteFolder(testDir)
184+
// }
189185

190186
override protected def afterAll(): Unit = {
191187
walkDeleteFolder(testDir)
192188
}
193189

194-
def randomKeyValue(keySize: Int = 16, valueSize: Int = 100): KeyValue =
195-
genKeyValues(1, keySize, valueSize).head
196-
197-
private def genKeyValues(count: Int, keySize: Int, valueSize: Int): Slice[KeyValue] = {
198-
val keyValues = Slice.create[KeyValue](count)
199-
Range.inclusive(1, count).foreach {
200-
_ =>
201-
val key = Slice[Byte](randomBytes(keySize))
202-
val value = Slice[Byte](randomBytes(valueSize))
203-
// keyValues add KeyValue(key, value, keyValues.lastOption)
204-
???
205-
}
206-
keyValues
207-
}
208-
209190
implicit class RunThisImplicits[T, R](f: => R) {
210191
def runThis(times: Int): Unit =
211192
for (i <- 1 to times) f
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/*
2+
* Copyright (C) 2018 Simer Plaha (@simerplaha)
3+
*
4+
* This file is a part of SwayDB.
5+
*
6+
* SwayDB is free software: you can redistribute it and/or modify
7+
* it under the terms of the GNU Affero General Public License as
8+
* published by the Free Software Foundation, either version 3 of the
9+
* License, or (at your option) any later version.
10+
*
11+
* SwayDB is distributed in the hope that it will be useful,
12+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14+
* GNU Affero General Public License for more details.
15+
*
16+
* You should have received a copy of the GNU Affero General Public License
17+
* along with SwayDB. If not, see <https://www.gnu.org/licenses/>.
18+
*/
19+
20+
package swaydb.core
21+
22+
import scala.concurrent.duration._
23+
import swaydb.data.util.StorageUnits._
24+
25+
object TestQueues {
26+
27+
implicit val level0PushDownPool = TestExecutionContext.executionContext
28+
29+
val keyValueLimiter = LimitQueues.keyValueLimiter(10.mb, 5.seconds)
30+
val fileOpenLimiter = LimitQueues.segmentOpenLimiter(100, 5.seconds)
31+
32+
}

data/src/test/scala/swaydb/data/TryAssert.scala renamed to core/src/test/scala/swaydb/core/TryAssert.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
* along with SwayDB. If not, see <https://www.gnu.org/licenses/>.
1818
*/
1919

20-
package swaydb.data
20+
package swaydb.core
2121

2222
import org.scalatest.Matchers
2323

core/src/test/scala/swaydb/core/level/LevelWriteSpec.scala

Lines changed: 56 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -19,30 +19,30 @@
1919

2020
package swaydb.core.level
2121

22-
import java.nio.file.{Files, NoSuchFileException}
22+
import java.nio.file.NoSuchFileException
2323

2424
import org.scalamock.scalatest.MockFactory
2525
import org.scalatest.PrivateMethodTester
26-
import swaydb.core.TestBase
26+
import swaydb.core.{TestBase, TestQueues}
2727
import swaydb.core.actor.TestActor
2828
import swaydb.core.data.Transient.Delete
2929
import swaydb.core.data._
3030
import swaydb.core.io.file.{DBFile, IO}
3131
import swaydb.core.level.actor.LevelAPI
32-
import swaydb.core.level.actor.LevelCommand.{PullRequest, PushMap, PushSegments, PushSegmentsResponse}
33-
import swaydb.core.map.{Map, MapEntry}
32+
import swaydb.core.level.actor.LevelCommand.{PushSegments, PushSegmentsResponse}
3433
import swaydb.core.map.serializer.{KeyValuesMapSerializer, SegmentsMapSerializer}
34+
import swaydb.core.map.{Map, MapEntry}
3535
import swaydb.core.segment.Segment
3636
import swaydb.core.util.Extension
3737
import swaydb.core.util.FileUtil._
38+
import swaydb.core.util.PipeOps._
3839
import swaydb.data.compaction.Throttle
40+
import swaydb.data.config.Dir
3941
import swaydb.data.slice.Slice
42+
import swaydb.data.storage.LevelStorage
4043
import swaydb.data.util.StorageUnits._
4144
import swaydb.order.KeyOrder
4245
import swaydb.serializers.Default._
43-
import swaydb.core.util.PipeOps._
44-
import swaydb.data.config.{Dir, RecoveryMode}
45-
import swaydb.data.storage.LevelStorage
4646
import swaydb.serializers._
4747

4848
import scala.collection.mutable.ListBuffer
@@ -79,8 +79,8 @@ class LevelWriteSpec extends TestBase with MockFactory with PrivateMethodTester
7979
// override def deleteFiles: Boolean =
8080
// false
8181

82-
implicit val maxSegmentsOpenCacheImplicitLimiter: DBFile => Unit = fileOpenLimiter
83-
implicit val keyValuesLimitImplicitLimiter: (PersistentReadOnly, Segment) => Unit = keyValueLimiter
82+
implicit val maxSegmentsOpenCacheImplicitLimiter: DBFile => Unit = TestQueues.fileOpenLimiter
83+
implicit val keyValuesLimitImplicitLimiter: (PersistentReadOnly, Segment) => Unit = TestQueues.keyValueLimiter
8484

8585
"Level" should {
8686
"initialise" in {
@@ -307,57 +307,59 @@ class LevelWriteSpec extends TestBase with MockFactory with PrivateMethodTester
307307
}
308308

309309
"distribute Segments to multiple directories based on the distribution ratio" in {
310-
val dir = testDir.resolve("distributeSegmentsTest")
311-
312-
def assertDistribution = {
313-
dir.resolve(1.toString).files(Extension.Seg) should have size 7
314-
dir.resolve(2.toString).files(Extension.Seg) should have size 14
315-
dir.resolve(3.toString).files(Extension.Seg) should have size 21
316-
dir.resolve(4.toString).files(Extension.Seg) should have size 28
317-
dir.resolve(5.toString).files(Extension.Seg) should have size 30
318-
}
310+
if (persistent) {
311+
val dir = testDir.resolve("distributeSegmentsTest")
312+
313+
def assertDistribution = {
314+
dir.resolve(1.toString).files(Extension.Seg) should have size 7
315+
dir.resolve(2.toString).files(Extension.Seg) should have size 14
316+
dir.resolve(3.toString).files(Extension.Seg) should have size 21
317+
dir.resolve(4.toString).files(Extension.Seg) should have size 28
318+
dir.resolve(5.toString).files(Extension.Seg) should have size 30
319+
}
319320

320-
val storage =
321-
LevelStorage.Persistent(
322-
mmapSegmentsOnWrite = mmapSegmentsOnWrite,
323-
mmapSegmentsOnRead = mmapSegmentsOnRead,
324-
dir = dir.resolve(1.toString),
325-
otherDirs =
326-
Seq(
327-
Dir(dir.resolve(2.toString), 2),
328-
Dir(dir.resolve(3.toString), 3),
329-
Dir(dir.resolve(4.toString), 4),
330-
Dir(dir.resolve(5.toString), 5)
331-
)
332-
)
333-
val keyValues = randomIntKeyStringValues(keyValuesCount, valueSize = 1000)
334-
335-
val level = TestLevel(throttle = (_) => Throttle(Duration.Zero, 0), segmentSize = 1.byte, levelStorage = storage)
321+
val storage =
322+
LevelStorage.Persistent(
323+
mmapSegmentsOnWrite = mmapSegmentsOnWrite,
324+
mmapSegmentsOnRead = mmapSegmentsOnRead,
325+
dir = dir.resolve(1.toString),
326+
otherDirs =
327+
Seq(
328+
Dir(dir.resolve(2.toString), 2),
329+
Dir(dir.resolve(3.toString), 3),
330+
Dir(dir.resolve(4.toString), 4),
331+
Dir(dir.resolve(5.toString), 5)
332+
)
333+
)
334+
val keyValues = randomIntKeyStringValues(keyValuesCount, valueSize = 1000)
335+
336+
val level = TestLevel(throttle = (_) => Throttle(Duration.Zero, 0), segmentSize = 1.byte, levelStorage = storage)
336337

337-
level.putKeyValues(keyValues).assertGet
338-
level.segmentsCount() shouldBe 100
339-
assertDistribution
338+
level.putKeyValues(keyValues).assertGet
339+
level.segmentsCount() shouldBe 100
340+
assertDistribution
340341

341-
//write the same key-values again so that all Segments are updated. This should still maintain the Segment distribution
342-
level.putKeyValues(keyValues).assertGet
343-
assertDistribution
342+
//write the same key-values again so that all Segments are updated. This should still maintain the Segment distribution
343+
level.putKeyValues(keyValues).assertGet
344+
assertDistribution
344345

345-
//shuffle key-values should still maintain distribution order
346-
Random.shuffle(keyValues.grouped(10).map(_.updateStats)).foreach {
347-
keyValues =>
348-
level.putKeyValues(keyValues).assertGet
349-
}
350-
assertDistribution
346+
//shuffle key-values should still maintain distribution order
347+
Random.shuffle(keyValues.grouped(10).map(_.updateStats)).foreach {
348+
keyValues =>
349+
level.putKeyValues(keyValues).assertGet
350+
}
351+
assertDistribution
351352

352-
//delete some key-values
353-
Random.shuffle(keyValues.grouped(10).map(_.updateStats)).take(2).foreach {
354-
keyValues =>
355-
val deleteKeyValues = Slice(keyValues.map(keyValue => Delete(keyValue.key)).toArray).updateStats
356-
level.putKeyValues(deleteKeyValues).assertGet
357-
}
353+
//delete some key-values
354+
Random.shuffle(keyValues.grouped(10).map(_.updateStats)).take(2).foreach {
355+
keyValues =>
356+
val deleteKeyValues = Slice(keyValues.map(keyValue => Delete(keyValue.key)).toArray).updateStats
357+
level.putKeyValues(deleteKeyValues).assertGet
358+
}
358359

359-
level.putKeyValues(keyValues).assertGet
360-
assertDistribution
360+
level.putKeyValues(keyValues).assertGet
361+
assertDistribution
362+
}
361363
}
362364

363365
"fail when writing a deleted segment" in {

core/src/test/scala/swaydb/core/map/MapEntrySpec.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ package swaydb.core.map
2121

2222
import java.util.concurrent.ConcurrentSkipListMap
2323

24-
import swaydb.core.TestBase
24+
import swaydb.core.{TestBase, TestQueues}
2525
import swaydb.core.data.{KeyValueReadOnly, PersistentReadOnly}
2626
import swaydb.core.io.file.DBFile
2727
import swaydb.core.io.reader.Reader
@@ -35,8 +35,8 @@ import swaydb.serializers._
3535
class MapEntrySpec extends TestBase {
3636

3737
implicit val ordering = KeyOrder.default
38-
implicit val maxSegmentsOpenCacheImplicitLimiter: DBFile => Unit = fileOpenLimiter
39-
implicit val keyValuesLimitImplicitLimiter: (PersistentReadOnly, Segment) => Unit = keyValueLimiter
38+
implicit val maxSegmentsOpenCacheImplicitLimiter: DBFile => Unit = TestQueues.fileOpenLimiter
39+
implicit val keyValuesLimitImplicitLimiter: (PersistentReadOnly, Segment) => Unit = TestQueues.keyValueLimiter
4040

4141
implicit val mapFormatter = SegmentsMapSerializer(removeDeletedRecords = false, mmapSegmentsOnRead = true, mmapSegmentsOnWrite = false, cacheKeysOnCreate = false)
4242

core/src/test/scala/swaydb/core/map/serializer/SegmentsMapSerializerSpec.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ package swaydb.core.map.serializer
2121

2222
import java.util.concurrent.ConcurrentSkipListMap
2323

24-
import swaydb.core.TestBase
24+
import swaydb.core.{TestBase, TestQueues}
2525
import swaydb.core.data.{KeyValue, PersistentReadOnly}
2626
import swaydb.core.io.file.DBFile
2727
import swaydb.core.io.reader.Reader
@@ -34,8 +34,8 @@ import swaydb.serializers._
3434

3535
class SegmentsMapSerializerSpec extends TestBase {
3636
implicit val ordering = KeyOrder.default
37-
implicit val maxSegmentsOpenCacheImplicitLimiter: DBFile => Unit = fileOpenLimiter
38-
implicit val keyValuesLimitImplicitLimiter: (PersistentReadOnly, Segment) => Unit = keyValueLimiter
37+
implicit val maxSegmentsOpenCacheImplicitLimiter: DBFile => Unit = TestQueues.fileOpenLimiter
38+
implicit val keyValuesLimitImplicitLimiter: (PersistentReadOnly, Segment) => Unit = TestQueues.keyValueLimiter
3939

4040
"SegmentsPersistentMapsSerializer" should {
4141

core/src/test/scala/swaydb/core/segment/SegmentPerformanceSpec.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
package swaydb.core.segment
2121

22-
import swaydb.core.TestBase
22+
import swaydb.core.{TestBase, TestQueues}
2323
import swaydb.core.data.{KeyValueReadOnly, PersistentReadOnly}
2424
import swaydb.core.io.file.DBFile
2525
import swaydb.core.util.Benchmark
@@ -55,8 +55,8 @@ class SegmentPerformanceSpec extends TestBase with Benchmark {
5555
val keyValuesCount = 100
5656

5757

58-
implicit val maxSegmentsOpenCacheImplicitLimiter: DBFile => Unit = fileOpenLimiter
59-
implicit val keyValuesLimitImplicitLimiter: (PersistentReadOnly, Segment) => Unit = keyValueLimiter
58+
implicit val maxSegmentsOpenCacheImplicitLimiter: DBFile => Unit = TestQueues.fileOpenLimiter
59+
implicit val keyValuesLimitImplicitLimiter: (PersistentReadOnly, Segment) => Unit = TestQueues.keyValueLimiter
6060

6161
val keyValues = randomIntKeyValues(keyValuesCount)
6262

core/src/test/scala/swaydb/core/segment/SegmentWriteSpec.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import swaydb.core.level.PathsDistributor
2828
import swaydb.core.segment.SegmentException.CannotCopyInMemoryFiles
2929
import swaydb.core.util.FileUtil._
3030
import swaydb.core.util._
31-
import swaydb.core.{LimitQueues, TestBase}
31+
import swaydb.core.{LimitQueues, TestBase, TestQueues}
3232
import swaydb.data.config.Dir
3333
import swaydb.data.slice.Slice
3434
import swaydb.data.util.StorageUnits._
@@ -68,8 +68,8 @@ class SegmentWriteSpec extends TestBase with Benchmark {
6868

6969
// override def deleteFiles = false
7070

71-
implicit val fileOpenLimiterImplicit: DBFile => Unit = fileOpenLimiter
72-
implicit val keyValueLimiterImplicit: (PersistentReadOnly, Segment) => Unit = keyValueLimiter
71+
implicit val fileOpenLimiterImplicit: DBFile => Unit = TestQueues.fileOpenLimiter
72+
implicit val keyValueLimiterImplicit: (PersistentReadOnly, Segment) => Unit = TestQueues.keyValueLimiter
7373

7474
"Segment" should {
7575

0 commit comments

Comments
 (0)