Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix Jena tests getting stuck in a deadlock #190

Merged
merged 1 commit into from
Oct 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ lazy val integrationTests = (project in file("integration-tests"))
),
commonSettings,
)
.dependsOn(stream, jena, rdf4j)
.dependsOn(stream, jena % "compile->compile;test->test", rdf4j)

lazy val examples = (project in file("examples"))
.settings(
Expand All @@ -220,4 +220,4 @@ lazy val examples = (project in file("examples"))
excludeDependencies ++= grpcExclusions,
commonSettings,
)
.dependsOn(grpc, stream, jena, rdf4j)
.dependsOn(grpc, stream, jena % "compile->compile;test->test", rdf4j)
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
package eu.ostrzyciel.jelly.examples

import eu.ostrzyciel.jelly.convert.jena.traits.JenaTest
import org.scalatest.matchers.should.Matchers
import org.scalatest.wordspec.AnyWordSpec

class ExamplesSpec extends AnyWordSpec, Matchers:
class ExamplesSpec extends AnyWordSpec, Matchers, JenaTest:
val examples: Seq[shared.Example] = Seq(
JenaRiot,
JenaRiotStreaming,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,16 @@
package eu.ostrzyciel.jelly.integration_tests

import eu.ostrzyciel.jelly.convert.jena.riot.JellyLanguage
import eu.ostrzyciel.jelly.convert.jena.traits.JenaTest
import org.apache.jena.riot.{Lang, RDFDataMgr}
import org.apache.jena.sparql.core.DatasetGraphFactory
import org.apache.jena.sys.JenaSystem
import org.scalatest.BeforeAndAfterAll
import org.scalatest.concurrent.ScalaFutures
import org.scalatest.matchers.should.Matchers
import org.scalatest.wordspec.AnyWordSpec

import scala.jdk.CollectionConverters.*

class BackCompatSpec extends AnyWordSpec, Matchers, ScalaFutures, BeforeAndAfterAll:
override def beforeAll(): Unit =
JenaSystem.init()

class BackCompatSpec extends AnyWordSpec, Matchers, ScalaFutures, JenaTest:
private val testCases = Seq(
("riverbench_main", "RiverBench main metadata", Seq("v1_0_0")),
("riverbench_nanopubs", "RiverBench nanopubs dataset metadata", Seq("v1_0_0")),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
package eu.ostrzyciel.jelly.integration_tests

import eu.ostrzyciel.jelly.convert.jena.traits.JenaTest
import eu.ostrzyciel.jelly.core.*
import eu.ostrzyciel.jelly.core.proto.v1.RdfStreamOptions
import eu.ostrzyciel.jelly.stream.*
import org.apache.jena.graph.Graph
import org.apache.jena.riot.{Lang, RDFDataMgr, RDFParser}
import org.apache.jena.sparql.core.DatasetGraph
import org.apache.jena.sparql.util.IsoMatcher
import org.apache.jena.sys.JenaSystem
import org.apache.pekko.actor.ActorSystem
import org.apache.pekko.stream.scaladsl.*
import org.scalatest.BeforeAndAfterAll
import org.scalatest.concurrent.ScalaFutures
import org.scalatest.matchers.should.Matchers
import org.scalatest.wordspec.AnyWordSpec
Expand Down Expand Up @@ -46,16 +45,13 @@ object CrossStreamingSpec extends AnyWordSpec, Matchers:
}


class CrossStreamingSpec extends AnyWordSpec, Matchers, ScalaFutures, BeforeAndAfterAll:
class CrossStreamingSpec extends AnyWordSpec, Matchers, ScalaFutures, JenaTest:
import CrossStreamingSpec.*

given actorSystem: ActorSystem = ActorSystem()
given ExecutionContext = actorSystem.getDispatcher
given PatienceConfig = PatienceConfig(timeout = 5.seconds, interval = 50.millis)

override def beforeAll(): Unit =
JenaSystem.init()

private val implementations: Seq[(String, TestStream)] = Seq(
("Jena", JenaTestStream),
("RDF4J", Rdf4jTestStream),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
package eu.ostrzyciel.jelly.integration_tests

import eu.ostrzyciel.jelly.convert.jena.JenaConverterFactory
import eu.ostrzyciel.jelly.convert.jena.traits.JenaTest
import eu.ostrzyciel.jelly.core.*
import eu.ostrzyciel.jelly.core.proto.v1
import eu.ostrzyciel.jelly.core.proto.future
import eu.ostrzyciel.jelly.core.proto.{future, v1}
import org.scalatest.concurrent.ScalaFutures
import org.scalatest.matchers.should.Matchers
import org.scalatest.wordspec.AnyWordSpec

/**
* Tests checking forward compatibility of Jelly with future versions of the protocol.
*/
class ForwardCompatSpec extends AnyWordSpec, Matchers, ScalaFutures:
class ForwardCompatSpec extends AnyWordSpec, Matchers, ScalaFutures, JenaTest:
private val futureFrame = future.RdfStreamFrame(Seq(
future.RdfStreamRow(future.RdfStreamRow.Row.Options(
future.RdfStreamOptions(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,27 +1,22 @@
package eu.ostrzyciel.jelly.integration_tests.io

import eu.ostrzyciel.jelly.convert.jena.traits.JenaTest
import eu.ostrzyciel.jelly.core.*
import eu.ostrzyciel.jelly.core.proto.v1.RdfStreamOptions
import eu.ostrzyciel.jelly.integration_tests.TestCases
import org.apache.jena.sys.JenaSystem
import org.apache.pekko.actor.ActorSystem
import org.scalatest.BeforeAndAfterAll
import org.scalatest.concurrent.ScalaFutures
import org.scalatest.matchers.should.Matchers
import org.scalatest.wordspec.AnyWordSpec

import java.io.{ByteArrayInputStream, ByteArrayOutputStream, File, FileInputStream}
import scala.concurrent.ExecutionException

/**
* Tests for IO ser/des (Jena RIOT, Jena RIOT streaming, RDF4J Rio, and semi-reactive IO over Pekko Streams).
*/
class IoSerDesSpec extends AnyWordSpec, Matchers, ScalaFutures, BeforeAndAfterAll:
class IoSerDesSpec extends AnyWordSpec, Matchers, ScalaFutures, JenaTest:
given ActorSystem = ActorSystem("test")

override def beforeAll(): Unit =
JenaSystem.init()

val presets: Seq[(RdfStreamOptions, Int, String)] = Seq(
(JellyOptions.smallGeneralized, 1, "small generalized"),
(JellyOptions.smallRdfStar, 1_000_000, "small RDF-star"),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package eu.ostrzyciel.jelly.integration_tests.io

import eu.ostrzyciel.jelly.convert.jena.JenaConverterFactory
import eu.ostrzyciel.jelly.convert.jena.traits.JenaTest
import eu.ostrzyciel.jelly.core.JellyOptions
import eu.ostrzyciel.jelly.core.proto.v1.*
import eu.ostrzyciel.jelly.integration_tests.TestCases
Expand All @@ -17,8 +18,7 @@ import scala.jdk.CollectionConverters.*
* [[eu.ostrzyciel.jelly.integration_tests.io.IoSerDesSpec]].
* More fine-grained tests for delimited/non-delimited detection can be found in the jelly-core module.
*/
class NonDelimitedDesSpec extends AnyWordSpec, Matchers:

class NonDelimitedDesSpec extends AnyWordSpec, Matchers, JenaTest:
val presets: Seq[(RdfStreamOptions, String)] = Seq(
(JellyOptions.smallGeneralized, "small generalized"),
(JellyOptions.bigGeneralized, "big generalized"),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package eu.ostrzyciel.jelly.convert.jena

import eu.ostrzyciel.jelly.convert.jena.traits.JenaTest
import org.apache.jena.sparql.core.Quad
import org.scalatest.matchers.should.Matchers
import org.scalatest.wordspec.AnyWordSpec

class JenaDecoderConverterSpec extends AnyWordSpec, Matchers:
class JenaDecoderConverterSpec extends AnyWordSpec, Matchers, JenaTest:
val instance = JenaDecoderConverter()

"JenaDecoderConverter" should {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package eu.ostrzyciel.jelly.convert.jena

import eu.ostrzyciel.jelly.convert.jena.traits.JenaTest
import org.apache.jena.graph.{NodeFactory, Triple}
import org.apache.jena.query.DatasetFactory
import org.apache.jena.rdf.model.impl.ModelCom
Expand All @@ -8,7 +9,7 @@ import org.apache.jena.sparql.graph.GraphFactory
import org.scalatest.matchers.should.Matchers
import org.scalatest.wordspec.AnyWordSpec

class JenaIterableAdapterSpec extends AnyWordSpec, Matchers:
class JenaIterableAdapterSpec extends AnyWordSpec, Matchers, JenaTest:
import JenaIterableAdapter.*

val triples = Set(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package eu.ostrzyciel.jelly.convert.jena

import eu.ostrzyciel.jelly.convert.jena.traits.JenaTest
import eu.ostrzyciel.jelly.core.*
import eu.ostrzyciel.jelly.core.proto.v1.*
import org.apache.jena.sparql.core.Quad
Expand All @@ -10,7 +11,7 @@ import org.scalatest.wordspec.AnyWordSpec
/**
* Test the handling of the many ways to represent the default graph in Jena.
*/
class JenaProtoEncoderSpec extends AnyWordSpec, Matchers:
class JenaProtoEncoderSpec extends AnyWordSpec, Matchers, JenaTest:
private val encodedDefaultGraph = RdfStreamRow(
RdfStreamRow.Row.GraphStart(
RdfGraphStart(RdfDefaultGraph())
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package eu.ostrzyciel.jelly.convert.jena.fuseki

import eu.ostrzyciel.jelly.convert.jena.riot.JellySubsystemLifecycle
import eu.ostrzyciel.jelly.convert.jena.traits.JenaTest
import org.apache.jena.fuseki.DEF
import org.apache.jena.sys.JenaSystem
import org.scalatest.matchers.should.Matchers
import org.scalatest.wordspec.AnyWordSpec

import scala.jdk.CollectionConverters.*

class JellyFusekiLifecycleSpec extends AnyWordSpec, Matchers:
class JellyFusekiLifecycleSpec extends AnyWordSpec, Matchers, JenaTest:
"JellyFusekiLifecycle" should {
"initialize after JenaSubsystemLifecycle" in {
val jenaModule = JellySubsystemLifecycle()
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package eu.ostrzyciel.jelly.convert.jena.traits

import org.apache.jena.sys.JenaSystem

object JenaTest:
JenaSystem.init()

/**
* Trait that should be included in all tests that use Jena.
* Guarantees that Jena is initialized before the tests are run and that we don't run into wonky issues like
* this one: https://github.com/apache/jena/issues/2787
*/
trait JenaTest:
// Touch the object to run the static initializer
JenaTest.toString