mirror of
https://github.com/sdkman/sdkman-cli.git
synced 2026-01-20 12:27:43 -05:00
FEATURE #388 - First spec for install script.
This commit is contained in:
27
src/test/groovy/sdkman/env/CleanBashEnvBuilder.groovy
vendored
Normal file
27
src/test/groovy/sdkman/env/CleanBashEnvBuilder.groovy
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
package sdkman.env
|
||||
|
||||
class CleanBashEnvBuilder {
|
||||
private final File baseFolder
|
||||
String httpProxy
|
||||
|
||||
static CleanBashEnvBuilder create(File baseFolder){
|
||||
new CleanBashEnvBuilder(baseFolder)
|
||||
}
|
||||
|
||||
private CleanBashEnvBuilder(File baseFolder){
|
||||
this.baseFolder = baseFolder
|
||||
}
|
||||
|
||||
CleanBashEnvBuilder withHttpProxy(String httpProxy){
|
||||
this.httpProxy = httpProxy
|
||||
this
|
||||
}
|
||||
|
||||
BashEnv build() {
|
||||
def env = [HOME: baseFolder.absolutePath]
|
||||
if(httpProxy) {
|
||||
env.put("http_proxy", httpProxy)
|
||||
}
|
||||
new BashEnv(baseFolder.absolutePath, env)
|
||||
}
|
||||
}
|
||||
77
src/test/groovy/sdkman/specs/InstallSpec.groovy
Normal file
77
src/test/groovy/sdkman/specs/InstallSpec.groovy
Normal file
@@ -0,0 +1,77 @@
|
||||
package sdkman.specs
|
||||
|
||||
import com.github.tomakehurst.wiremock.WireMockServer
|
||||
import sdkman.env.BashEnv
|
||||
import sdkman.env.CleanBashEnvBuilder
|
||||
import sdkman.utils.WireMockServerProvider
|
||||
import spock.lang.Specification
|
||||
|
||||
import static sdkman.stubs.WebServiceStub.primePlainFileEndpoint
|
||||
import static sdkman.stubs.WebServiceStub.primeZipEndpoint
|
||||
import static sdkman.utils.FilesystemUtils.prepareBaseDir
|
||||
|
||||
class InstallSpec extends Specification {
|
||||
final installScriptName = "install.sh"
|
||||
final sdkmanScriptsName = "sdkman-scripts.zip"
|
||||
final service = "http://localhost:8080"
|
||||
final testScriptBuildDir = "build/testScripts" as File
|
||||
final distributionsBuildDir = "build/distributions" as File
|
||||
final wiremockStaticFolder = "src/test/resources/__files/" as File
|
||||
BashEnv bash
|
||||
File sdkmanBaseDir
|
||||
WireMockServer wireMockServer
|
||||
|
||||
|
||||
void setup() {
|
||||
sdkmanBaseDir = prepareBaseDir()
|
||||
bash = CleanBashEnvBuilder.create(sdkmanBaseDir).build()
|
||||
bash.start()
|
||||
copyInstallRequiredFilesIntoWiremockFolder()
|
||||
wireMockServer = WireMockServerProvider.wireMockServer()
|
||||
primeInstallScriptEndpoint()
|
||||
primeDownloadSdkmanEndpoint()
|
||||
}
|
||||
|
||||
void cleanup() {
|
||||
removeInstallRequiredFilesFromWiremockFolder()
|
||||
}
|
||||
|
||||
void "should install init script at bin dir"() {
|
||||
given:
|
||||
bash.execute("curl -s ${service} | bash")
|
||||
bash.resetOutput()
|
||||
|
||||
when:
|
||||
bash.execute("ls ${sdkmanBaseDir.absolutePath}/.sdkman/bin")
|
||||
|
||||
then:
|
||||
bash.output.contains("sdkman-init.sh")
|
||||
}
|
||||
|
||||
private def copyInstallRequiredFilesIntoWiremockFolder() {
|
||||
def installScript = "${testScriptBuildDir.absolutePath}/${installScriptName}"
|
||||
def sdkManScriptsZip = "${distributionsBuildDir.absolutePath}/${sdkmanScriptsName}"
|
||||
bash.execute("cp ${installScript} ${wiremockStaticFolder.absolutePath}")
|
||||
bash.execute("cp ${sdkManScriptsZip} ${wiremockStaticFolder.absolutePath}")
|
||||
}
|
||||
|
||||
private def removeInstallRequiredFilesFromWiremockFolder() {
|
||||
bash.execute("rm -rf ${wiremockStaticFolder.absolutePath}/${installScriptName}")
|
||||
bash.execute("rm -rf ${wiremockStaticFolder.absolutePath}/${sdkmanScriptsName}")
|
||||
}
|
||||
|
||||
private def primeInstallScriptEndpoint() {
|
||||
primePlainFileEndpoint("/", installScriptName)
|
||||
}
|
||||
|
||||
private def primeDownloadSdkmanEndpoint() {
|
||||
primeZipEndpoint("/res?platform=${getUname()}&purpose=install", sdkmanScriptsName)
|
||||
}
|
||||
|
||||
private def getUname() {
|
||||
bash.execute('echo $(uname)')
|
||||
def uname = bash.output.trim()
|
||||
bash.resetOutput()
|
||||
uname
|
||||
}
|
||||
}
|
||||
@@ -19,19 +19,27 @@ class WebServiceStub {
|
||||
.withStatus(302)))
|
||||
|
||||
def binary = "${candidate}-${version}.zip"
|
||||
stubFor(get(urlEqualTo("/$binary")).willReturn(
|
||||
aResponse()
|
||||
.withStatus(200)
|
||||
.withHeader("Content-Type", "application/zip")
|
||||
.withBodyFile(binary)))
|
||||
primeZipEndpoint("/$binary", binary)
|
||||
}
|
||||
|
||||
static primeSelfupdate() {
|
||||
stubFor(get(urlEqualTo("/selfupdate")).willReturn(
|
||||
aResponse()
|
||||
.withStatus(200)
|
||||
.withHeader("Content-Type", "text/plain")
|
||||
.withBodyFile("selfupdate.sh")))
|
||||
primePlainFileEndpoint("/selfupdate", "selfupdate.sh")
|
||||
}
|
||||
|
||||
static primeFileEndpoint(String endpoint, String filePath, String contentType) {
|
||||
stubFor(get(urlEqualTo(endpoint)).willReturn(
|
||||
aResponse()
|
||||
.withStatus(200)
|
||||
.withHeader("Content-Type", contentType)
|
||||
.withBodyFile(filePath)))
|
||||
}
|
||||
|
||||
static primeZipEndpoint(String endpoint, String filePath) {
|
||||
primeFileEndpoint(endpoint, filePath, "application/zip")
|
||||
}
|
||||
|
||||
static primePlainFileEndpoint(String endpoint, String filePath) {
|
||||
primeFileEndpoint(endpoint, filePath, "text/plain")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
25
src/test/groovy/sdkman/utils/WireMockServerProvider.groovy
Normal file
25
src/test/groovy/sdkman/utils/WireMockServerProvider.groovy
Normal file
@@ -0,0 +1,25 @@
|
||||
package sdkman.utils
|
||||
|
||||
import com.github.tomakehurst.wiremock.WireMockServer
|
||||
import com.github.tomakehurst.wiremock.client.WireMock
|
||||
|
||||
import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig
|
||||
|
||||
class WireMockServerProvider {
|
||||
static SERVICE_UP_HOST = "localhost"
|
||||
static SERVICE_UP_PORT = 8080
|
||||
static WireMockServer wireMockServer
|
||||
|
||||
static def wireMockServer() {
|
||||
wireMockServer == null ? createWireMockServer() : wireMockServer
|
||||
}
|
||||
|
||||
private static def createWireMockServer() {
|
||||
wireMockServer = new WireMockServer(wireMockConfig().port(SERVICE_UP_PORT))
|
||||
wireMockServer.start()
|
||||
WireMock.configureFor(SERVICE_UP_HOST, SERVICE_UP_PORT)
|
||||
wireMockServer
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -3,6 +3,7 @@ package sdkman
|
||||
import com.github.tomakehurst.wiremock.WireMockServer
|
||||
import com.github.tomakehurst.wiremock.client.WireMock
|
||||
import sdkman.utils.UnixUtils
|
||||
import sdkman.utils.WireMockServerProvider
|
||||
|
||||
import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig
|
||||
import static cucumber.api.groovy.Hooks.After
|
||||
@@ -47,9 +48,7 @@ initScript = new File(binDir, "sdkman-init.sh")
|
||||
bash = null
|
||||
|
||||
if(!binding.hasVariable("wireMock")) {
|
||||
wireMock = new WireMockServer(wireMockConfig().port(SERVICE_UP_PORT))
|
||||
wireMock.start()
|
||||
WireMock.configureFor(SERVICE_UP_HOST, SERVICE_UP_PORT)
|
||||
wireMock = WireMockServerProvider.wireMockServer()
|
||||
}
|
||||
|
||||
Before(){
|
||||
|
||||
Reference in New Issue
Block a user