blob: fb1db0cd3bfe70dbac510ea5fcd9e44f2d2c6d06 [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
= SBT Integration Test example README
This is an example program that uses the Kudu test utilities to demonstrate integration testing
in a Scala/SBT application:
- Create a table
To run the example integration tests, ensure SBT is installed and execute
the following from the 'sbt-int-test-example' directory. This will execute all Scalatest test classes
in the 'src/it/scala' directory:
[source,bash]
----
$ sbt it:test
----
== Configuration
To configure SBT for retrieving the correct kudu testing binary jar, there is a required SBT plugin:
[source,sbt]
.project/plugins.sbt
----
resolvers += "phData Releases" at "https://repository.phdata.io/artifactory/libs-release" //<1>
classpathTypes += "maven-plugin" //<2>
addSbtPlugin("io.phdata" % "sbt-os-detector" % "0.2.0") //<3>
----
<1> Include an additional repository for plugin resolution
<2> Include dependencies that are of type 'maven-plugin' which is required to resolve https://github.com/trustin/os-maven-plugin[OS Maven Plugin]
<3> The https://github.com/phdata/sbt-os-detector[SBT OS Detector] plugin
In the `build.sbt`, include the dependencies for kudu-test-utils and kudu-binary:
[source,sbt]
----
lazy val root = (project in file("."))
.configs(IntegrationTest)
.enablePlugins(OsDetectorPlugin) //<1>
.settings(
Defaults.itSettings,
name := "sbt-int-test-example",
libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.8" % "it,test",
libraryDependencies += "org.apache.kudu" % "kudu-client" % "1.16.0",
libraryDependencies += "org.apache.kudu" % "kudu-test-utils" % "1.16.0" % "it", //<2>
libraryDependencies += "org.apache.kudu" % "kudu-binary" % "1.16.0" % "it" classifier osDetectorClassifier.value, //<3>
libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.2.3",
)
----
<1> Enable the SBT OS Detector plugin
<2> Provides utilities for working with the Kudu test cluster
<3> `kudu-binary` dependency that matches the current operating system. Note: Linux and MacOS are
the only compile targets for Kudu.
Once dependencies are resolved, creating integration tests are straightforward:
[source,scala]
----
class KuduExampleITest extends FunSuite with BeforeAndAfter {
private val harness = new KuduTestHarness() //<1>
before {
harness.before() //<3>
}
after {
harness.after() //<3>
}
test("create table example") {
val kuduExample = new KuduExample(harness.getClient) //<2>
val tableName = "testMovies"
val testMovieTable = kuduExample.createMovieTable(tableName)
testMovieTable match {
case Failure(exception) => fail(exception)
case Success(table) => assertResult(tableName)(table.getName)
}
}
}
----
<1> Create a new instance of the `KuduTestHarness` to use the default settings of the `MiniKuduCluster`
<2> Kudu clients (both sync and async) are provided automatically by the test harness
<3> Ensure your `MiniKuduCluster` is properly started and terminated after testing.