v0.8.8 - add ip-address validation, rename method check due to naming conflict with Kotlin's check
This commit is contained in:
parent
2623eb857f
commit
5baedbb32e
7 changed files with 66 additions and 44 deletions
16
build.gradle
16
build.gradle
|
@ -6,23 +6,18 @@ buildscript {
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||||
classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
apply plugin: 'idea'
|
|
||||||
apply plugin: 'org.jetbrains.kotlin.jvm'
|
apply plugin: 'org.jetbrains.kotlin.jvm'
|
||||||
apply plugin: 'org.jetbrains.kotlin.plugin.serialization'
|
|
||||||
apply plugin: 'maven-publish'
|
|
||||||
apply plugin: 'java-test-fixtures'
|
apply plugin: 'java-test-fixtures'
|
||||||
|
apply plugin: 'maven-publish'
|
||||||
|
|
||||||
group = 'io.provs'
|
group = 'io.provs'
|
||||||
version = '0.8.8-SNAPSHOT'
|
version = '0.8.8'
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
jcenter()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
test {
|
test {
|
||||||
|
@ -53,10 +48,9 @@ java {
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
||||||
implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.14.0" // JVM dependency
|
|
||||||
implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
|
implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
|
||||||
|
|
||||||
implementation group: 'com.hierynomus', name: 'sshj', version: '0.30.0'
|
implementation group: 'com.hierynomus', name: 'sshj', version: '0.31.0'
|
||||||
|
|
||||||
api "org.slf4j:slf4j-api:1.7.30"
|
api "org.slf4j:slf4j-api:1.7.30"
|
||||||
api "ch.qos.logback:logback-classic:1.2.3"
|
api "ch.qos.logback:logback-classic:1.2.3"
|
||||||
|
@ -79,6 +73,7 @@ task fatJar(type: Jar) {
|
||||||
with jar
|
with jar
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//create a single Jar with all dependencies excl. Kotlin libs without version-number but with suffix "latest"
|
||||||
task fatJarLatest(type: Jar) {
|
task fatJarLatest(type: Jar) {
|
||||||
doFirst {
|
doFirst {
|
||||||
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
|
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
|
||||||
|
@ -114,7 +109,6 @@ task uberJar(type: Jar) {
|
||||||
archiveClassifier = 'uber'
|
archiveClassifier = 'uber'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//create a single Jar with all dependencies incl. Kotlin libs - as ...-latest
|
//create a single Jar with all dependencies incl. Kotlin libs - as ...-latest
|
||||||
task uberJarLatest(type: Jar) {
|
task uberJarLatest(type: Jar) {
|
||||||
|
|
||||||
|
@ -162,6 +156,8 @@ publishing {
|
||||||
header(HttpHeaderAuthentication)
|
header(HttpHeaderAuthentication)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
mavenLocal()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -148,9 +148,9 @@ open class Prov protected constructor(private val processor: Processor, val name
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Executes command cmd and returns true in case of success else false.
|
* Executes command cmd and returns true in case of success else false.
|
||||||
* The success resp. failure does not count into the overall success.
|
* The success resp. failure is not evaluated, i.e. it is not taken into account for the overall success.
|
||||||
*/
|
*/
|
||||||
fun check(cmd: String, dir: String? = null): Boolean {
|
fun chk(cmd: String, dir: String? = null): Boolean {
|
||||||
return cmdNoEval(cmd, dir).success
|
return cmdNoEval(cmd, dir).success
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ import io.provs.processors.ContainerStartMode
|
||||||
import io.provs.processors.ContainerUbuntuHostProcessor
|
import io.provs.processors.ContainerUbuntuHostProcessor
|
||||||
import io.provs.processors.RemoteProcessor
|
import io.provs.processors.RemoteProcessor
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
import java.net.InetAddress
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the name of the calling function but excluding some functions of the prov framework
|
* Returns the name of the calling function but excluding some functions of the prov framework
|
||||||
|
@ -71,7 +72,10 @@ fun local(): Prov {
|
||||||
*/
|
*/
|
||||||
@Suppress("unused") // used by other libraries resp. KotlinScript
|
@Suppress("unused") // used by other libraries resp. KotlinScript
|
||||||
fun remote(host: String, remoteUser: String, password: Secret? = null, platform: String? = null): Prov {
|
fun remote(host: String, remoteUser: String, password: Secret? = null, platform: String? = null): Prov {
|
||||||
return Prov.newInstance(RemoteProcessor(host, remoteUser, password), platform)
|
require(host.isNotEmpty(), { "Host must not be empty." })
|
||||||
|
require(remoteUser.isNotEmpty(), { "Remote user must not be empty." })
|
||||||
|
|
||||||
|
return Prov.newInstance(RemoteProcessor(InetAddress.getByName(host), remoteUser, password), platform)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -13,10 +13,11 @@ import java.io.BufferedReader
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
import java.io.InputStreamReader
|
import java.io.InputStreamReader
|
||||||
|
import java.net.InetAddress
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
|
|
||||||
|
|
||||||
class RemoteProcessor(ip: String, user: String, password: Secret? = null) : Processor {
|
class RemoteProcessor(ip: InetAddress, user: String, password: Secret? = null) : Processor {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
@Suppress("JAVA_CLASS_ON_COMPANION")
|
@Suppress("JAVA_CLASS_ON_COMPANION")
|
||||||
|
|
|
@ -344,7 +344,7 @@ internal class ProvTest {
|
||||||
@Test
|
@Test
|
||||||
fun check_returnsTrue() {
|
fun check_returnsTrue() {
|
||||||
// when
|
// when
|
||||||
val res = local().check("echo 123")
|
val res = local().chk("echo 123")
|
||||||
|
|
||||||
// then
|
// then
|
||||||
assertTrue(res)
|
assertTrue(res)
|
||||||
|
@ -353,7 +353,7 @@ internal class ProvTest {
|
||||||
@Test
|
@Test
|
||||||
fun check_returnsFalse() {
|
fun check_returnsFalse() {
|
||||||
// when
|
// when
|
||||||
val res = local().check("cmddoesnotexist")
|
val res = local().chk("cmddoesnotexist")
|
||||||
|
|
||||||
// then
|
// then
|
||||||
assertFalse(res)
|
assertFalse(res)
|
||||||
|
|
49
src/test/kotlin/io/provs/UtilsKtTest.kt
Normal file
49
src/test/kotlin/io/provs/UtilsKtTest.kt
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
package io.provs
|
||||||
|
|
||||||
|
import io.provs.test.defaultTestContainer
|
||||||
|
import io.provs.test.tags.ContainerTest
|
||||||
|
import org.junit.jupiter.api.Assertions.*
|
||||||
|
import org.junit.jupiter.api.Disabled
|
||||||
|
import org.junit.jupiter.api.Test
|
||||||
|
import java.net.UnknownHostException
|
||||||
|
|
||||||
|
internal class UtilsKtTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun test_getCallingMethodName() {
|
||||||
|
// when
|
||||||
|
val s = getCallingMethodName()
|
||||||
|
|
||||||
|
// then
|
||||||
|
assertEquals("test_getCallingMethodName", s)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@ContainerTest
|
||||||
|
fun runCmdInContainer() {
|
||||||
|
// when
|
||||||
|
val res = defaultTestContainer().cmd("echo something")
|
||||||
|
|
||||||
|
// then
|
||||||
|
assertTrue(res.success)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun remote_emptyHost() {
|
||||||
|
assertThrows(IllegalArgumentException::class.java,
|
||||||
|
{ remote("", "user") })
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun remote_invalidHost() {
|
||||||
|
assertThrows(
|
||||||
|
UnknownHostException::class.java,
|
||||||
|
{ remote("invalid_host", "user") })
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Disabled // run manually after having updated user
|
||||||
|
fun test_remote() {
|
||||||
|
assertTrue(remote("127.0.0.1", "user").cmd("echo sth").success)
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,28 +0,0 @@
|
||||||
package io.provs
|
|
||||||
|
|
||||||
import io.provs.test.defaultTestContainer
|
|
||||||
import io.provs.test.tags.ContainerTest
|
|
||||||
import org.junit.jupiter.api.Assertions
|
|
||||||
import org.junit.jupiter.api.Test
|
|
||||||
|
|
||||||
internal class UtilsTest {
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun test_getCallingMethodName() {
|
|
||||||
// when
|
|
||||||
val s = getCallingMethodName()
|
|
||||||
|
|
||||||
// then
|
|
||||||
Assertions.assertEquals("test_getCallingMethodName", s)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
@ContainerTest
|
|
||||||
fun test_docker() {
|
|
||||||
// when
|
|
||||||
val res = defaultTestContainer().cmd("echo something")
|
|
||||||
|
|
||||||
// then
|
|
||||||
Assertions.assertEquals(true, res.success)
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in a new issue