Skip to content

Commit 3348d1a

Browse files
authored
Merge pull request #1 from seniorjoinu/junit5
Junit5
2 parents dc5ea21 + 16e4356 commit 3348d1a

File tree

6 files changed

+88
-81
lines changed

6 files changed

+88
-81
lines changed

build.gradle

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,14 @@ dependencies {
1414
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
1515
implementation 'net.java.dev.jna:jna:5.2.0'
1616
implementation 'net.java.dev.jna:jna-platform:5.2.0'
17-
18-
testImplementation 'com.github.spekframework.spek:spek-dsl-jvm:2.0.1'
17+
1918
testImplementation "org.jetbrains.kotlin:kotlin-reflect:1.3.21"
19+
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.3.1'
20+
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.3.1'
21+
}
22+
23+
test {
24+
useJUnitPlatform()
2025
}
2126

2227
compileKotlin {

src/main/kotlin/net/joinu/wirehair/Wirehair.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package net.joinu.wirehair
22

33
import com.sun.jna.Pointer
44
import com.sun.jna.ptr.IntByReference
5+
import sun.nio.ch.DirectBuffer
56
import java.io.Closeable
67

78

@@ -24,14 +25,14 @@ object Wirehair {
2425
* This structure is used to encode some message into infinite sequence of repair blocks
2526
* Rule: one encoder = one encoded message
2627
*
27-
* @param message [ByteArray] - message to encode
28+
* @param message [DirectBuffer] - message to encode
2829
* @param messageBytes [Int] - bytes in the message
2930
* @param blockBytes [Int] - bytes in an output block
3031
* @param reuseOpt [Encoder] - <optional> pointer to prior codec object
3132
*
3233
* @throws [IllegalStateException]
3334
*/
34-
class Encoder(message: ByteArray, messageBytes: Int, blockBytes: Int, reuseOpt: Encoder? = null) : Closeable {
35+
class Encoder(message: DirectBuffer, messageBytes: Int, blockBytes: Int, reuseOpt: Encoder? = null) : Closeable {
3536
val pointer: Pointer
3637

3738
init {

src/main/kotlin/net/joinu/wirehair/WirehairLib.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import com.sun.jna.Library
44
import com.sun.jna.Native
55
import com.sun.jna.Pointer
66
import com.sun.jna.ptr.IntByReference
7+
import sun.nio.ch.DirectBuffer
78

89

910
interface WirehairLib : Library {
@@ -18,7 +19,7 @@ interface WirehairLib : Library {
1819
}
1920

2021
fun wirehair_init_(expected_version: Int): Int
21-
fun wirehair_encoder_create(reuseOpt: Pointer?, message: ByteArray, messageBytes: Int, blockBytes: Int): Pointer?
22+
fun wirehair_encoder_create(reuseOpt: Pointer?, message: DirectBuffer, messageBytes: Int, blockBytes: Int): Pointer?
2223
fun wirehair_encode(
2324
codec: Pointer,
2425
blockId: Int,
Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,49 @@
11
package net.joinu.wirehair
22

3-
import org.spekframework.spek2.Spek
4-
import org.spekframework.spek2.style.gherkin.Feature
3+
import org.junit.jupiter.api.RepeatedTest
4+
import sun.nio.ch.DirectBuffer
5+
import java.nio.ByteBuffer
56

67

7-
object HighLevelTest : Spek({
8-
Feature("High level wrapper works fine") {
9-
Scenario("Repeating ReadmeTest but in new syntax") {
10-
// initializing wirehair
11-
Wirehair.init()
8+
object HighLevelTest {
9+
@RepeatedTest(100)
10+
fun `the high-level wrapper works fine`() {
11+
// initializing wirehair
12+
Wirehair.init()
1213

13-
// setting sizes
14-
val kPacketSize = 1400
15-
val kMessageBytes = 1000 * 1000 + 333
14+
// setting sizes
15+
val kPacketSize = 1400
16+
val kMessageBytes = 1000 * 1000 + 333
1617

17-
// creating the message
18-
val message = ByteArray(kMessageBytes)
18+
// creating the message
19+
val message = ByteBuffer.allocateDirect(kMessageBytes) as DirectBuffer
1920

20-
// creating encoder and decoder and releasing them after all stuff is done
21-
Wirehair.Encoder(message, kMessageBytes, kPacketSize).use { encoder ->
22-
Wirehair.Decoder(kMessageBytes, kPacketSize).use { decoder ->
23-
var blockId = 0
21+
// creating encoder and decoder and releasing them after all stuff is done
22+
Wirehair.Encoder(message, kMessageBytes, kPacketSize).use { encoder ->
23+
Wirehair.Decoder(kMessageBytes, kPacketSize).use { decoder ->
24+
var blockId = 0
2425

25-
while (true) {
26-
// generating unique blockId
27-
blockId++
26+
while (true) {
27+
// generating unique blockId
28+
blockId++
2829

29-
// generating repair block
30-
val block = ByteArray(kPacketSize)
31-
val writeLen = encoder.encode(blockId, block, kPacketSize)
30+
// generating repair block
31+
val block = ByteArray(kPacketSize)
32+
val writeLen = encoder.encode(blockId, block, kPacketSize)
3233

33-
// imitating 10 percent packet drop
34-
if (blockId % 10 == 0) continue
34+
// imitating 10 percent packet drop
35+
if (blockId % 10 == 0) continue
3536

36-
// accumulating repair blocks
37-
val enough = decoder.decode(blockId, block, writeLen)
37+
// accumulating repair blocks
38+
val enough = decoder.decode(blockId, block, writeLen)
3839

39-
if (enough) break
40-
}
41-
42-
// decoding message from accumulated repair blocks
43-
val decoded = ByteArray(kMessageBytes)
44-
decoder.recover(decoded, kMessageBytes)
40+
if (enough) break
4541
}
42+
43+
// decoding message from accumulated repair blocks
44+
val decoded = ByteArray(kMessageBytes)
45+
decoder.recover(decoded, kMessageBytes)
4646
}
4747
}
4848
}
49-
})
49+
}
Lines changed: 43 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,67 @@
11
package net.joinu.wirehair
22

33
import com.sun.jna.ptr.IntByReference
4-
import org.spekframework.spek2.Spek
5-
import org.spekframework.spek2.style.gherkin.Feature
4+
import org.junit.jupiter.api.RepeatedTest
5+
import sun.nio.ch.DirectBuffer
6+
import java.nio.ByteBuffer
67

78

8-
object ReadmeTest: Spek({
9-
Feature("Wrapper works fine") {
10-
Scenario("Repeating the example test from wirehair repo") {
11-
val initResult = WirehairLib.INSTANCE.wirehair_init_(2)
9+
object ReadmeTest {
10+
@RepeatedTest(100)
11+
fun `the low-level wrapper works fine`() {
12+
val initResult = WirehairLib.INSTANCE.wirehair_init_(2)
1213

13-
assert(initResult == 0)
14+
assert(initResult == 0)
1415

15-
val kPacketSize = 1400
16-
val kMessageBytes = 1000 * 1000 + 333
16+
val kPacketSize = 1400
17+
val kMessageBytes = 1000 * 1000 + 333
1718

18-
val message = ByteArray(kMessageBytes)
19+
val message = ByteBuffer.allocateDirect(kMessageBytes) as DirectBuffer
1920

20-
val encoder = WirehairLib.INSTANCE.wirehair_encoder_create(null, message, kMessageBytes, kPacketSize)
21-
?: error("Encoder is not created")
21+
val encoder = WirehairLib.INSTANCE.wirehair_encoder_create(null, message, kMessageBytes, kPacketSize)
22+
?: error("Encoder is not created")
2223

23-
val decoder = WirehairLib.INSTANCE.wirehair_decoder_create(null, kMessageBytes, kPacketSize)
24+
val decoder = WirehairLib.INSTANCE.wirehair_decoder_create(null, kMessageBytes, kPacketSize)
2425

25-
if (decoder == null) {
26-
WirehairLib.INSTANCE.wirehair_free(encoder)
27-
error("Decoder is not created")
28-
}
26+
if (decoder == null) {
27+
WirehairLib.INSTANCE.wirehair_free(encoder)
28+
error("Decoder is not created")
29+
}
2930

30-
var blockId = 0
31+
var blockId = 0
3132

32-
while (true) {
33-
blockId++
33+
while (true) {
34+
blockId++
3435

35-
val block = ByteArray(kPacketSize)
36-
val writeLen = IntByReference(0)
36+
val block = ByteArray(kPacketSize)
37+
val writeLen = IntByReference(0)
3738

38-
val encodeResult = WirehairLib.INSTANCE.wirehair_encode(
39-
encoder,
40-
blockId,
41-
block,
42-
kPacketSize,
43-
writeLen
44-
)
39+
val encodeResult = WirehairLib.INSTANCE.wirehair_encode(
40+
encoder,
41+
blockId,
42+
block,
43+
kPacketSize,
44+
writeLen
45+
)
4546

46-
if (blockId % 10 == 0) continue
47+
if (blockId % 10 == 0) continue
4748

48-
assert(encodeResult == 0) { "Encode failed" }
49+
assert(encodeResult == 0) { "Encode failed" }
4950

50-
val decodeResult = WirehairLib.INSTANCE.wirehair_decode(decoder, blockId, block, writeLen.value)
51+
val decodeResult = WirehairLib.INSTANCE.wirehair_decode(decoder, blockId, block, writeLen.value)
5152

52-
if (decodeResult == 0)
53-
break
53+
if (decodeResult == 0)
54+
break
5455

55-
assert(decodeResult == 1) { "Decode failed" }
56-
}
56+
assert(decodeResult == 1) { "Decode failed" }
57+
}
5758

58-
val decoded = ByteArray(kMessageBytes)
59-
val recoverResult = WirehairLib.INSTANCE.wirehair_recover(decoder, decoded, kMessageBytes)
59+
val decoded = ByteArray(kMessageBytes)
60+
val recoverResult = WirehairLib.INSTANCE.wirehair_recover(decoder, decoded, kMessageBytes)
6061

61-
assert(recoverResult == 0) { "Recover failed" }
62+
assert(recoverResult == 0) { "Recover failed" }
6263

63-
WirehairLib.INSTANCE.wirehair_free(encoder)
64-
WirehairLib.INSTANCE.wirehair_free(decoder)
65-
}
64+
WirehairLib.INSTANCE.wirehair_free(encoder)
65+
WirehairLib.INSTANCE.wirehair_free(decoder)
6666
}
67-
})
67+
}
261 KB
Binary file not shown.

0 commit comments

Comments
 (0)