Lib
This commit is contained in:
parent
e69f8b7ff8
commit
2c7af614d6
@ -31,6 +31,7 @@ dependencies {
|
||||
implementation("org.springframework.boot:spring-boot-starter-actuator")
|
||||
implementation("org.springframework.boot:spring-boot-starter-websocket")
|
||||
implementation("org.springframework:spring-tx")
|
||||
implementation("org.springframework.boot:spring-boot-starter-validation")
|
||||
|
||||
|
||||
implementation("io.github.microutils:kotlin-logging-jvm:2.0.11")
|
||||
|
||||
@ -49,8 +49,7 @@ open class TestBase {
|
||||
operation = setOf(OperationType.Encode, OperationType.ExtractSubtitles, OperationType.ConvertSubtitles, OperationType.Metadata),
|
||||
fileUri = "file:///unit/${UUID.randomUUID()}.mkv"
|
||||
)
|
||||
)
|
||||
start.newReferenceId()
|
||||
).apply { newReferenceId() }
|
||||
return start
|
||||
|
||||
}
|
||||
|
||||
@ -84,7 +84,7 @@ class CollectEventsListenerTest : TestBase() {
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
}.newReferenceId()
|
||||
|
||||
val parsed = mediaParsedEvent(
|
||||
collection = "MyCollection",
|
||||
@ -128,7 +128,7 @@ class CollectEventsListenerTest : TestBase() {
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
}.newReferenceId()
|
||||
|
||||
val parsed = mediaParsedEvent(
|
||||
collection = "MyCollection",
|
||||
@ -279,7 +279,7 @@ class CollectEventsListenerTest : TestBase() {
|
||||
fun failure4() {
|
||||
val started = defaultStartEvent().let { ev ->
|
||||
ev.copy(data = ev.data.copy(operation = setOf(OperationType.Encode)))
|
||||
}
|
||||
}.newReferenceId()
|
||||
|
||||
val parsed = mediaParsedEvent(
|
||||
collection = "MyCollection",
|
||||
|
||||
@ -1,25 +1,18 @@
|
||||
package no.iktdev.mediaprocessing.coordinator.listeners.events
|
||||
|
||||
import io.mockk.verify
|
||||
import no.iktdev.eventi.models.Event
|
||||
import no.iktdev.eventi.models.store.TaskStatus
|
||||
import no.iktdev.mediaprocessing.TestBase
|
||||
import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.ConvertTaskCreatedEvent
|
||||
import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.OperationType
|
||||
import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.ProcesserExtractResultEvent
|
||||
import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.StartData
|
||||
import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.StartProcessingEvent
|
||||
import org.junit.jupiter.api.Assertions.*
|
||||
|
||||
import org.junit.jupiter.api.DisplayName
|
||||
import org.junit.jupiter.api.Test
|
||||
import java.io.File
|
||||
|
||||
import io.mockk.*
|
||||
import no.iktdev.eventi.models.Event
|
||||
import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.*
|
||||
import no.iktdev.mediaprocessing.shared.common.event_task_contract.tasks.ConvertTask
|
||||
import no.iktdev.mediaprocessing.shared.database.stores.TaskStore
|
||||
|
||||
import org.junit.jupiter.api.Assertions.*
|
||||
import org.junit.jupiter.api.DisplayName
|
||||
import org.junit.jupiter.api.Test
|
||||
import org.mockito.Mockito.mockStatic
|
||||
import org.mockito.kotlin.any
|
||||
import java.io.File
|
||||
import java.nio.file.Files
|
||||
import java.nio.file.Path
|
||||
|
||||
@ -43,14 +36,14 @@ class MediaCreateConvertTaskListenerTest : TestBase() {
|
||||
fileUri = tempFile.absolutePath,
|
||||
operation = setOf(OperationType.ConvertSubtitles)
|
||||
)
|
||||
)
|
||||
).newReferenceId()
|
||||
val extractEvent = ProcesserExtractResultEvent(
|
||||
status = TaskStatus.Completed,
|
||||
data = ProcesserExtractResultEvent.ExtractResult(
|
||||
cachedOutputFile = tempFile.absolutePath,
|
||||
language = "en"
|
||||
)
|
||||
)
|
||||
).derivedOf(startEvent)
|
||||
|
||||
val history = listOf(startEvent)
|
||||
val result = listener.onEvent(extractEvent, history)
|
||||
@ -221,7 +214,7 @@ class MediaCreateConvertTaskListenerTest : TestBase() {
|
||||
fileUri = "/tmp/video.srt",
|
||||
operation = setOf(OperationType.ConvertSubtitles)
|
||||
)
|
||||
)
|
||||
).newReferenceId()
|
||||
|
||||
val extractEvent = ProcesserExtractResultEvent(
|
||||
status = TaskStatus.Completed,
|
||||
@ -229,7 +222,7 @@ class MediaCreateConvertTaskListenerTest : TestBase() {
|
||||
cachedOutputFile = "/tmp/video.srt",
|
||||
language = "en"
|
||||
)
|
||||
)
|
||||
).derivedOf(startEvent)
|
||||
|
||||
val history = listOf(startEvent)
|
||||
val result = listener.onEvent(extractEvent, history)
|
||||
|
||||
@ -45,17 +45,17 @@ class MediaCreateEncodeTaskListenerTest: TestBase() {
|
||||
fun testOnEventWithSingleAudioTrack() {
|
||||
val startEvent = StartProcessingEvent(
|
||||
StartData(setOf(OperationType.Encode), fileUri = "/tmp/movie.mkv")
|
||||
)
|
||||
).newReferenceId()
|
||||
val parsedEvent = MediaStreamParsedEvent(
|
||||
data = ParsedMediaStreams(
|
||||
videoStream = listOf(mockVideoStream(index = 0, codec = "h264", disposition = mockDisposition(), tags = mockTags())),
|
||||
audioStream = listOf(mockAudioStream(index = 1, codec = "aac", disposition = mockDisposition(), tags = mockTags()))
|
||||
)
|
||||
)
|
||||
).derivedOf(startEvent)
|
||||
val selectedEvent = MediaTracksEncodeSelectedEvent(
|
||||
selectedVideoTrack = 0,
|
||||
selectedAudioTrack = 0
|
||||
)
|
||||
).derivedOf(parsedEvent)
|
||||
|
||||
val history = listOf(startEvent, parsedEvent)
|
||||
|
||||
@ -85,7 +85,8 @@ class MediaCreateEncodeTaskListenerTest: TestBase() {
|
||||
fun testOnEventWithExtendedAudioTrack() {
|
||||
val startEvent = StartProcessingEvent(
|
||||
StartData(setOf(OperationType.Encode), fileUri = "/tmp/movie.mkv")
|
||||
)
|
||||
).newReferenceId()
|
||||
|
||||
val parsedEvent = MediaStreamParsedEvent(
|
||||
data = ParsedMediaStreams(
|
||||
videoStream = listOf(mockVideoStream(index = 0, codec = "h264", disposition = mockDisposition(), tags = mockTags())),
|
||||
@ -94,12 +95,12 @@ class MediaCreateEncodeTaskListenerTest: TestBase() {
|
||||
mockAudioStream(index = 2, codec = "aac", disposition = mockDisposition(), tags = mockTags())
|
||||
)
|
||||
)
|
||||
)
|
||||
).derivedOf(startEvent)
|
||||
val selectedEvent = MediaTracksEncodeSelectedEvent(
|
||||
selectedVideoTrack = 0,
|
||||
selectedAudioTrack = 0,
|
||||
selectedAudioExtendedTrack = 1
|
||||
)
|
||||
).derivedOf(parsedEvent)
|
||||
|
||||
val history = listOf(startEvent, parsedEvent)
|
||||
|
||||
|
||||
@ -1,11 +1,7 @@
|
||||
package no.iktdev.mediaprocessing.coordinator.listeners.events
|
||||
|
||||
|
||||
import io.mockk.Runs
|
||||
import io.mockk.every
|
||||
import io.mockk.just
|
||||
import io.mockk.mockkObject
|
||||
import io.mockk.verify
|
||||
import io.mockk.*
|
||||
import no.iktdev.eventi.models.Task
|
||||
import no.iktdev.eventi.models.store.PersistedTask
|
||||
import no.iktdev.eventi.models.store.TaskStatus
|
||||
@ -13,22 +9,16 @@ import no.iktdev.mediaprocessing.ffmpeg.data.ParsedMediaStreams
|
||||
import no.iktdev.mediaprocessing.ffmpeg.data.SubtitleStream
|
||||
import no.iktdev.mediaprocessing.ffmpeg.data.SubtitleTags
|
||||
import no.iktdev.mediaprocessing.ffmpeg.data.Tags
|
||||
import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.MediaStreamParsedEvent
|
||||
import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.MediaTracksExtractSelectedEvent
|
||||
import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.OperationType
|
||||
import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.ProcesserExtractTaskCreatedEvent
|
||||
import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.StartData
|
||||
import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.StartProcessingEvent
|
||||
import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.*
|
||||
import no.iktdev.mediaprocessing.shared.common.event_task_contract.tasks.ExtractSubtitleTask
|
||||
import no.iktdev.mediaprocessing.shared.database.stores.TaskStore
|
||||
|
||||
import org.junit.jupiter.api.Assertions.*
|
||||
import org.junit.jupiter.api.BeforeEach
|
||||
import org.junit.jupiter.api.DisplayName
|
||||
import org.junit.jupiter.api.Test
|
||||
import java.io.File
|
||||
import java.time.Duration
|
||||
import java.util.UUID
|
||||
import java.util.*
|
||||
|
||||
class MediaCreateExtractTaskListenerTest {
|
||||
|
||||
@ -184,11 +174,12 @@ class MediaCreateExtractTaskListenerTest {
|
||||
fun testOnEventCreatesTasks() {
|
||||
val startEvent = StartProcessingEvent(
|
||||
StartData(setOf(OperationType.ExtractSubtitles), fileUri = "/tmp/movie.mkv")
|
||||
)
|
||||
).newReferenceId()
|
||||
val parsedEvent = MediaStreamParsedEvent(
|
||||
data = ParsedMediaStreams(subtitleStream = listOf(dummyStream(0, "subrip", "eng")))
|
||||
)
|
||||
).derivedOf(startEvent)
|
||||
val selectedEvent = MediaTracksExtractSelectedEvent(selectedSubtitleTracks = listOf(0))
|
||||
.derivedOf(parsedEvent)
|
||||
|
||||
val history = listOf(startEvent, parsedEvent)
|
||||
|
||||
@ -222,7 +213,7 @@ class MediaCreateExtractTaskListenerTest {
|
||||
// Hvis: vi har en StartProcessingEvent og to subtitle streams
|
||||
val startEvent = StartProcessingEvent(
|
||||
StartData(setOf(OperationType.ExtractSubtitles), fileUri = "/tmp/movie.mkv")
|
||||
)
|
||||
).newReferenceId()
|
||||
val parsedEvent = MediaStreamParsedEvent(
|
||||
data = ParsedMediaStreams(
|
||||
subtitleStream = listOf(
|
||||
@ -230,8 +221,9 @@ class MediaCreateExtractTaskListenerTest {
|
||||
dummyStream(1, "ass", "jpn")
|
||||
)
|
||||
)
|
||||
)
|
||||
).derivedOf(startEvent)
|
||||
val selectedEvent = MediaTracksExtractSelectedEvent(selectedSubtitleTracks = listOf(0, 1))
|
||||
.derivedOf(parsedEvent)
|
||||
|
||||
val history = listOf(startEvent, parsedEvent)
|
||||
|
||||
|
||||
@ -9,12 +9,10 @@ import no.iktdev.mediaprocessing.ffmpeg.data.Tags
|
||||
import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.MediaStreamParsedEvent
|
||||
import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.MediaTracksDetermineSubtitleTypeEvent
|
||||
import no.iktdev.mediaprocessing.shared.common.model.SubtitleType
|
||||
import org.junit.jupiter.api.Assertions.*
|
||||
|
||||
import org.junit.jupiter.api.Assertions.*
|
||||
import org.junit.jupiter.api.Assertions.assertEquals
|
||||
import org.junit.jupiter.api.Assertions.assertTrue
|
||||
import org.junit.jupiter.api.DisplayName
|
||||
import org.junit.jupiter.api.Named
|
||||
import org.junit.jupiter.api.Test
|
||||
import org.junit.jupiter.params.ParameterizedTest
|
||||
import org.junit.jupiter.params.provider.MethodSource
|
||||
import java.util.stream.Stream
|
||||
@ -163,7 +161,7 @@ class MediaDetermineSubtitleTrackTypeListenerTest {
|
||||
fun testSubtitleCases(testCase: SubtitleTestCase) {
|
||||
val event = MediaStreamParsedEvent(
|
||||
ParsedMediaStreams(subtitleStream = listOf(testCase.stream))
|
||||
)
|
||||
).newReferenceId()
|
||||
val result = listener.onEvent(event, emptyList()) as MediaTracksDetermineSubtitleTypeEvent
|
||||
|
||||
if (testCase.expectedKept) {
|
||||
|
||||
@ -54,6 +54,8 @@ class MediaReadStreamsTaskCreatedListenerTest: TestBase() {
|
||||
Returneres CoordinatorReadStreamsTaskCreatedEvent med riktig taskId
|
||||
""")
|
||||
fun testOnEventParsedInfoEventWithStartProcessing() {
|
||||
val startEvent = StartProcessingEvent(StartData(fileUri = "file://test.mkv", operation = emptySet()))
|
||||
.newReferenceId()
|
||||
val parsedEvent = MediaParsedInfoEvent(
|
||||
MediaParsedInfoEvent.ParsedData(
|
||||
parsedCollection = "collection",
|
||||
@ -61,8 +63,8 @@ class MediaReadStreamsTaskCreatedListenerTest: TestBase() {
|
||||
parsedSearchTitles = listOf("title"),
|
||||
mediaType = MediaType.Movie
|
||||
)
|
||||
)
|
||||
val startEvent = StartProcessingEvent(StartData(fileUri = "file://test.mkv", operation = emptySet()))
|
||||
).derivedOf(startEvent)
|
||||
|
||||
|
||||
val result = listener.onEvent(parsedEvent, listOf(startEvent))
|
||||
|
||||
|
||||
@ -1,15 +1,10 @@
|
||||
package no.iktdev.mediaprocessing.coordinator.listeners.events
|
||||
|
||||
import no.iktdev.eventi.models.Event
|
||||
import no.iktdev.mediaprocessing.ffmpeg.data.AudioStream
|
||||
import no.iktdev.mediaprocessing.ffmpeg.data.Disposition
|
||||
import no.iktdev.mediaprocessing.ffmpeg.data.ParsedMediaStreams
|
||||
import no.iktdev.mediaprocessing.ffmpeg.data.Tags
|
||||
import no.iktdev.mediaprocessing.ffmpeg.data.VideoStream
|
||||
import no.iktdev.mediaprocessing.ffmpeg.data.*
|
||||
import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.MediaStreamParsedEvent
|
||||
import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.MediaTracksEncodeSelectedEvent
|
||||
import org.junit.jupiter.api.Assertions.*
|
||||
import org.junit.jupiter.api.Assertions.*
|
||||
import org.junit.jupiter.api.DisplayName
|
||||
import org.junit.jupiter.api.Test
|
||||
|
||||
@ -210,7 +205,7 @@ class MediaTracksEncodeSelectorTest: MediaSelectEncodeTracksListener() {
|
||||
val audioStreams = listOf(dummyAudioStream(0, "jpn", 2), dummyAudioStream(1, "jpn", 6))
|
||||
val parsedEvent = MediaStreamParsedEvent(
|
||||
ParsedMediaStreams(videoStream = videoStreams, audioStream = audioStreams, subtitleStream = emptyList())
|
||||
)
|
||||
).newReferenceId()
|
||||
val result = onEvent(parsedEvent, emptyList()) as MediaTracksEncodeSelectedEvent
|
||||
assertEquals(0, result.selectedVideoTrack)
|
||||
assertEquals(0, result.selectedAudioTrack)
|
||||
|
||||
@ -8,7 +8,8 @@ import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.MediaT
|
||||
import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.MediaTracksExtractSelectedEvent
|
||||
import no.iktdev.mediaprocessing.shared.common.model.SubtitleItem
|
||||
import no.iktdev.mediaprocessing.shared.common.model.SubtitleType
|
||||
import org.junit.jupiter.api.Assertions.*
|
||||
import org.junit.jupiter.api.Assertions.assertEquals
|
||||
import org.junit.jupiter.api.Assertions.assertNull
|
||||
import org.junit.jupiter.api.DisplayName
|
||||
import org.junit.jupiter.api.Test
|
||||
|
||||
@ -78,7 +79,7 @@ class MediaSelectExtractTracksListenerTest: TestBase() {
|
||||
dummySubtitleStream(0, "eng", SubtitleType.Dialogue),
|
||||
dummySubtitleStream(1, "eng", SubtitleType.Commentary)
|
||||
)
|
||||
val event = MediaTracksDetermineSubtitleTypeEvent(subtitleTrackItems = items)
|
||||
val event = MediaTracksDetermineSubtitleTypeEvent(subtitleTrackItems = items).newReferenceId()
|
||||
val result = listener.onEvent(event, emptyList()) as MediaTracksExtractSelectedEvent
|
||||
assertEquals(listOf(0), result.selectedSubtitleTracks)
|
||||
}
|
||||
|
||||
@ -1,8 +1,12 @@
|
||||
package no.iktdev.mediaprocessing.processer.config
|
||||
|
||||
import org.jetbrains.annotations.NotNull
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties
|
||||
import org.springframework.validation.annotation.Validated
|
||||
|
||||
@ConfigurationProperties(prefix = "directories")
|
||||
@Validated
|
||||
data class DirectoryProperties(
|
||||
@field:NotNull
|
||||
val logs: String,
|
||||
)
|
||||
@ -88,7 +88,7 @@ class SubtitleTaskListener(
|
||||
TaskStatus.Cancelled -> "Canceled"
|
||||
else -> ""
|
||||
}
|
||||
return ProcesserExtractResultEvent(null, status, error = message)
|
||||
return ProcesserExtractResultEvent(null, status, error = message).producedFrom(task)
|
||||
}
|
||||
|
||||
override fun getFfmpeg(): FFmpeg {
|
||||
|
||||
@ -94,7 +94,7 @@ class VideoTaskListener(
|
||||
TaskStatus.Cancelled -> "Canceled"
|
||||
else -> ""
|
||||
}
|
||||
return ProcesserEncodeResultEvent(null, null, status, error = message)
|
||||
return ProcesserEncodeResultEvent(null, null, status, error = message).producedFrom(task)
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -1,8 +1,11 @@
|
||||
package no.iktdev.mediaprocessing.processer
|
||||
|
||||
import no.iktdev.eventi.models.Event
|
||||
import no.iktdev.eventi.models.Task
|
||||
import no.iktdev.mediaprocessing.processer.config.DirectoryProperties
|
||||
import no.iktdev.mediaprocessing.processer.config.ExecutablesConfig
|
||||
import no.iktdev.mediaprocessing.shared.common.configs.MediaPaths
|
||||
import org.junit.jupiter.api.Assertions.assertEquals
|
||||
|
||||
object TestUtils {
|
||||
fun getFileUtil(): FileUtil {
|
||||
@ -25,3 +28,12 @@ object TestUtils {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fun assertSameReferenceId(task: Task, event: Event?) {
|
||||
requireNotNull(event) { "Event was null" }
|
||||
assertEquals(
|
||||
task.referenceId,
|
||||
event.referenceId,
|
||||
"Expected event to keep same referenceId as task"
|
||||
)
|
||||
}
|
||||
|
||||
@ -8,12 +8,14 @@ import no.iktdev.eventi.tasks.TaskReporter
|
||||
import no.iktdev.eventi.tasks.TaskTypeRegistry
|
||||
import no.iktdev.mediaprocessing.ffmpeg.FFmpeg
|
||||
import no.iktdev.mediaprocessing.processer.TestUtils
|
||||
import no.iktdev.mediaprocessing.processer.assertSameReferenceId
|
||||
import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.ProcesserExtractResultEvent
|
||||
import no.iktdev.mediaprocessing.shared.common.event_task_contract.tasks.ExtractSubtitleData
|
||||
import no.iktdev.mediaprocessing.shared.common.event_task_contract.tasks.ExtractSubtitleTask
|
||||
import org.junit.jupiter.api.Assertions.assertEquals
|
||||
import org.junit.jupiter.api.Assertions.assertTrue
|
||||
import org.junit.jupiter.api.BeforeEach
|
||||
import org.junit.jupiter.api.DisplayName
|
||||
import org.junit.jupiter.api.Test
|
||||
import java.util.*
|
||||
import kotlin.system.measureTimeMillis
|
||||
@ -86,4 +88,86 @@ class SubtitleTaskListenerTest {
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("""
|
||||
Når en event produseres fra en task
|
||||
Hvis task har en gitt referenceId
|
||||
Så:
|
||||
Skal eventen ha samme referenceId
|
||||
"""
|
||||
)
|
||||
fun producedFrom_keeps_referenceId() {
|
||||
val task = ExtractSubtitleTask(
|
||||
ExtractSubtitleData(
|
||||
inputFile = "input.mp4",
|
||||
outputFileName = "output.srt",
|
||||
arguments = listOf("-y"),
|
||||
language = "eng"
|
||||
)
|
||||
).newReferenceId()
|
||||
|
||||
val event = ProcesserExtractResultEvent(
|
||||
status = TaskStatus.Completed
|
||||
).producedFrom(task)
|
||||
|
||||
assertSameReferenceId(task, event)
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("""
|
||||
Når en task feiler og createIncompleteStateTaskEvent kalles
|
||||
Hvis task har en referenceId
|
||||
Så:
|
||||
Skal eventen som returneres ha samme referenceId
|
||||
""")
|
||||
fun createIncompleteStateTaskEvent_keeps_referenceId() {
|
||||
val task = ExtractSubtitleTask(
|
||||
ExtractSubtitleData(
|
||||
inputFile = "input.mp4",
|
||||
outputFileName = "output.srt",
|
||||
arguments = listOf("-y"),
|
||||
language = "eng"
|
||||
)
|
||||
).newReferenceId()
|
||||
|
||||
val listener = SubtitleTaskListener(
|
||||
fileUtil = TestUtils.getFileUtil(),
|
||||
executableConfig = TestUtils.getExecutableConfig()
|
||||
)
|
||||
|
||||
val event = listener.createIncompleteStateTaskEvent(
|
||||
task = task,
|
||||
status = TaskStatus.Failed,
|
||||
exception = RuntimeException("boom")
|
||||
)
|
||||
|
||||
assertSameReferenceId(task, event)
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("""
|
||||
Når VideoTaskListener kjører en EncodeTask
|
||||
Hvis task har en referenceId
|
||||
Så:
|
||||
Skal resultat-eventen ha samme referenceId
|
||||
""")
|
||||
fun onTask_keeps_referenceId() = runTest {
|
||||
val task = ExtractSubtitleTask(
|
||||
ExtractSubtitleData(
|
||||
inputFile = "input.mp4",
|
||||
outputFileName = "output.srt",
|
||||
arguments = listOf("-y"),
|
||||
language = "eng"
|
||||
)
|
||||
).newReferenceId()
|
||||
|
||||
val listener = TestListener(delay = 10)
|
||||
|
||||
listener.accept(task, overrideReporter)
|
||||
listener.getJob()?.join()
|
||||
|
||||
val event = listener.getResult()
|
||||
assertTrue(event is ProcesserExtractResultEvent)
|
||||
assertSameReferenceId(task, event)
|
||||
}
|
||||
}
|
||||
@ -11,12 +11,14 @@ import no.iktdev.mediaprocessing.ffmpeg.FFmpeg
|
||||
import no.iktdev.mediaprocessing.processer.CoordinatorClient
|
||||
import no.iktdev.mediaprocessing.processer.LocalProgressCache
|
||||
import no.iktdev.mediaprocessing.processer.TestUtils
|
||||
import no.iktdev.mediaprocessing.processer.assertSameReferenceId
|
||||
import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.ProcesserEncodeResultEvent
|
||||
import no.iktdev.mediaprocessing.shared.common.event_task_contract.tasks.EncodeData
|
||||
import no.iktdev.mediaprocessing.shared.common.event_task_contract.tasks.EncodeTask
|
||||
import org.junit.jupiter.api.Assertions.assertEquals
|
||||
import org.junit.jupiter.api.Assertions.assertTrue
|
||||
import org.junit.jupiter.api.BeforeEach
|
||||
import org.junit.jupiter.api.DisplayName
|
||||
import org.junit.jupiter.api.Test
|
||||
import java.util.*
|
||||
import kotlin.system.measureTimeMillis
|
||||
@ -25,7 +27,8 @@ class VideoTaskListenerTest {
|
||||
|
||||
|
||||
class TestListener(val delay: Long, coordinatorClient: CoordinatorClient) :
|
||||
VideoTaskListener(coordinatorWebClient = coordinatorClient,
|
||||
VideoTaskListener(
|
||||
coordinatorWebClient = coordinatorClient,
|
||||
localProgress = LocalProgressCache(),
|
||||
fileUtil = TestUtils.getFileUtil(),
|
||||
executableConfig = TestUtils.getExecutableConfig(),
|
||||
@ -36,6 +39,7 @@ class VideoTaskListenerTest {
|
||||
fun getResult(): Event? {
|
||||
return _result
|
||||
}
|
||||
|
||||
override fun onComplete(task: Task, result: Event?) {
|
||||
this._result = result
|
||||
}
|
||||
@ -62,6 +66,7 @@ class VideoTaskListenerTest {
|
||||
fun setup() {
|
||||
TaskTypeRegistry.register(EncodeTask::class.java)
|
||||
}
|
||||
|
||||
private val coordinatorClient = mockk<CoordinatorClient>(relaxed = true)
|
||||
|
||||
@Test
|
||||
@ -90,4 +95,81 @@ class VideoTaskListenerTest {
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("""
|
||||
Når en event produseres fra en task
|
||||
Hvis task har en gitt referenceId
|
||||
Så:
|
||||
Skal eventen ha samme referenceId
|
||||
"""
|
||||
)
|
||||
fun producedFrom_keeps_referenceId() {
|
||||
val task = EncodeTask(
|
||||
EncodeData(inputFile = "input.mp4", outputFileName = "output.mp4", arguments = listOf("-y"))
|
||||
).newReferenceId()
|
||||
|
||||
val event = ProcesserEncodeResultEvent(
|
||||
status = TaskStatus.Completed
|
||||
).producedFrom(task)
|
||||
|
||||
assertSameReferenceId(task, event)
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("""
|
||||
Når en task feiler og createIncompleteStateTaskEvent kalles
|
||||
Hvis task har en referenceId
|
||||
Så:
|
||||
Skal eventen som returneres ha samme referenceId
|
||||
""")
|
||||
fun createIncompleteStateTaskEvent_keeps_referenceId() {
|
||||
val task = EncodeTask(
|
||||
EncodeData(inputFile = "input.mp4", outputFileName = "output.mp4", arguments = listOf("-y"))
|
||||
).newReferenceId()
|
||||
|
||||
val listener = VideoTaskListener(
|
||||
coordinatorWebClient = coordinatorClient,
|
||||
localProgress = LocalProgressCache(),
|
||||
fileUtil = TestUtils.getFileUtil(),
|
||||
executableConfig = TestUtils.getExecutableConfig()
|
||||
)
|
||||
|
||||
val event = listener.createIncompleteStateTaskEvent(
|
||||
task = task,
|
||||
status = TaskStatus.Failed,
|
||||
exception = RuntimeException("boom")
|
||||
)
|
||||
|
||||
assertSameReferenceId(task, event)
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("""
|
||||
Når VideoTaskListener kjører en EncodeTask
|
||||
Hvis task har en referenceId
|
||||
Så:
|
||||
Skal resultat-eventen ha samme referenceId
|
||||
""")
|
||||
fun onTask_keeps_referenceId() = runTest {
|
||||
val task = EncodeTask(
|
||||
EncodeData(
|
||||
inputFile = "input.mp4",
|
||||
outputFileName = "output.mp4",
|
||||
arguments = listOf("-y")
|
||||
)
|
||||
).newReferenceId()
|
||||
|
||||
val listener = TestListener(delay = 10, coordinatorClient)
|
||||
|
||||
listener.accept(task, overrideReporter)
|
||||
listener.getJob()?.join()
|
||||
|
||||
val event = listener.getResult()
|
||||
assertTrue(event is ProcesserEncodeResultEvent)
|
||||
assertSameReferenceId(task, event)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@ -1,5 +1,5 @@
|
||||
[versions]
|
||||
eventi = "1.0-rc38"
|
||||
eventi = "1.0-rc39"
|
||||
exfl = "1.0-rc1"
|
||||
|
||||
[libraries]
|
||||
|
||||
@ -9,6 +9,7 @@ import com.google.gson.GsonBuilder
|
||||
import com.google.gson.JsonDeserializer
|
||||
import com.google.gson.JsonPrimitive
|
||||
import com.google.gson.JsonSerializer
|
||||
import no.iktdev.eventi.models.Event
|
||||
import no.iktdev.eventi.models.store.TaskStatus
|
||||
import org.junit.jupiter.api.Test
|
||||
import org.junit.jupiter.api.assertDoesNotThrow
|
||||
@ -106,8 +107,9 @@ class TaskResultEventSerializationTest {
|
||||
// --- 5. Fallback ---
|
||||
null
|
||||
}
|
||||
|
||||
return ctor.callBy(args)
|
||||
val instance = ctor.callBy(args)
|
||||
if (instance is Event) { instance.newReferenceId() }
|
||||
return instance
|
||||
}
|
||||
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user