diff --git a/src/main/kotlin/com/coder/toolbox/CoderGatewayExtension.kt b/src/main/kotlin/com/coder/toolbox/CoderGatewayExtension.kt deleted file mode 100644 index 8a99e70..0000000 --- a/src/main/kotlin/com/coder/toolbox/CoderGatewayExtension.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.coder.toolbox - -import com.jetbrains.toolbox.api.core.PluginSecretStore -import com.jetbrains.toolbox.api.core.PluginSettingsStore -import com.jetbrains.toolbox.api.core.ServiceLocator -import com.jetbrains.toolbox.api.remoteDev.RemoteDevExtension -import com.jetbrains.toolbox.api.remoteDev.RemoteEnvironmentConsumer -import com.jetbrains.toolbox.api.remoteDev.RemoteProvider -import com.jetbrains.toolbox.api.ui.ToolboxUi -import kotlinx.coroutines.CoroutineScope -import okhttp3.OkHttpClient - -/** - * Entry point into the extension. - */ -class CoderGatewayExtension : RemoteDevExtension { - // All services must be passed in here and threaded as necessary. - override fun createRemoteProviderPluginInstance(serviceLocator: ServiceLocator): RemoteProvider { - return CoderRemoteProvider( - OkHttpClient(), - serviceLocator.getService(RemoteEnvironmentConsumer::class.java), - serviceLocator.getService(CoroutineScope::class.java), - serviceLocator.getService(ToolboxUi::class.java), - serviceLocator.getService(PluginSettingsStore::class.java), - serviceLocator.getService(PluginSecretStore::class.java), - ) - } -} diff --git a/src/main/kotlin/com/coder/toolbox/CoderRemoteEnvironment.kt b/src/main/kotlin/com/coder/toolbox/CoderRemoteEnvironment.kt index 35087c6..07a9000 100644 --- a/src/main/kotlin/com/coder/toolbox/CoderRemoteEnvironment.kt +++ b/src/main/kotlin/com/coder/toolbox/CoderRemoteEnvironment.kt @@ -1,16 +1,21 @@ package com.coder.toolbox +import com.coder.toolbox.browser.BrowserUtil import com.coder.toolbox.models.WorkspaceAndAgentStatus import com.coder.toolbox.sdk.CoderRestClient import com.coder.toolbox.sdk.v2.models.Workspace import com.coder.toolbox.sdk.v2.models.WorkspaceAgent +import com.coder.toolbox.util.withPath import com.coder.toolbox.views.Action import com.coder.toolbox.views.EnvironmentView +import com.jetbrains.toolbox.api.core.ServiceLocator import com.jetbrains.toolbox.api.remoteDev.AbstractRemoteProviderEnvironment import com.jetbrains.toolbox.api.remoteDev.EnvironmentVisibilityState import com.jetbrains.toolbox.api.remoteDev.environments.EnvironmentContentsView import com.jetbrains.toolbox.api.remoteDev.states.EnvironmentStateConsumer import com.jetbrains.toolbox.api.ui.ToolboxUi +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.launch import java.util.concurrent.CompletableFuture /** @@ -19,32 +24,44 @@ import java.util.concurrent.CompletableFuture * Used in the environment list view. */ class CoderRemoteEnvironment( + private val serviceLocator: ServiceLocator, private val client: CoderRestClient, private var workspace: Workspace, private var agent: WorkspaceAgent, - private val ui: ToolboxUi, + private var cs: CoroutineScope, ) : AbstractRemoteProviderEnvironment() { + private var status = WorkspaceAndAgentStatus.from(workspace, agent) + + private val ui: ToolboxUi = serviceLocator.getService(ToolboxUi::class.java) override fun getId(): String = "${workspace.name}.${agent.name}" override fun getName(): String = "${workspace.name}.${agent.name}" - private var status = WorkspaceAndAgentStatus.from(workspace, agent) init { actionsList.add( Action("Open web terminal") { - // TODO - check this later -// ui.openUrl(client.url.withPath("/${workspace.ownerName}/$name/terminal").toString()) + cs.launch { + BrowserUtil.browse(client.url.withPath("/${workspace.ownerName}/$name/terminal").toString()) { + ui.showErrorInfoPopup(it) + } + } }, ) actionsList.add( Action("Open in dashboard") { - // TODO - check this later -// ui.openUrl(client.url.withPath("/@${workspace.ownerName}/${workspace.name}").toString()) + cs.launch { + BrowserUtil.browse(client.url.withPath("/@${workspace.ownerName}/${workspace.name}").toString()) { + ui.showErrorInfoPopup(it) + } + } }, ) actionsList.add( Action("View template") { - // TODO - check this later -// ui.openUrl(client.url.withPath("/templates/${workspace.templateName}").toString()) + cs.launch { + BrowserUtil.browse(client.url.withPath("/templates/${workspace.templateName}").toString()) { + ui.showErrorInfoPopup(it) + } + } }, ) actionsList.add( @@ -79,7 +96,7 @@ class CoderRemoteEnvironment( val newStatus = WorkspaceAndAgentStatus.from(workspace, agent) if (newStatus != status) { status = newStatus - val state = status.toRemoteEnvironmentState() + val state = status.toRemoteEnvironmentState(serviceLocator) listenerSet.forEach { it.consume(state) } } } @@ -108,7 +125,7 @@ class CoderRemoteEnvironment( // connected state can mask the workspace state. // TODO@JB: You can still press connect if the environment is // unreachable. Is that expected? - consumer.consume(status.toRemoteEnvironmentState()) + consumer.consume(status.toRemoteEnvironmentState(serviceLocator)) return super.addStateListener(consumer) } diff --git a/src/main/kotlin/com/coder/toolbox/CoderRemoteProvider.kt b/src/main/kotlin/com/coder/toolbox/CoderRemoteProvider.kt index 8929d9c..54556f1 100644 --- a/src/main/kotlin/com/coder/toolbox/CoderRemoteProvider.kt +++ b/src/main/kotlin/com/coder/toolbox/CoderRemoteProvider.kt @@ -18,10 +18,12 @@ import com.coder.toolbox.views.SignInPage import com.coder.toolbox.views.TokenPage import com.jetbrains.toolbox.api.core.PluginSecretStore import com.jetbrains.toolbox.api.core.PluginSettingsStore +import com.jetbrains.toolbox.api.core.ServiceLocator import com.jetbrains.toolbox.api.core.ui.icons.SvgIcon import com.jetbrains.toolbox.api.remoteDev.ProviderVisibilityState import com.jetbrains.toolbox.api.remoteDev.RemoteEnvironmentConsumer import com.jetbrains.toolbox.api.remoteDev.RemoteProvider +import com.jetbrains.toolbox.api.remoteDev.ui.EnvironmentUiPageManager import com.jetbrains.toolbox.api.ui.ToolboxUi import com.jetbrains.toolbox.api.ui.actions.RunnableActionDescription import com.jetbrains.toolbox.api.ui.components.AccountDropdownField @@ -39,15 +41,17 @@ import kotlin.coroutines.cancellation.CancellationException import kotlin.time.Duration.Companion.seconds class CoderRemoteProvider( + private val serviceLocator: ServiceLocator, private val httpClient: OkHttpClient, - private val consumer: RemoteEnvironmentConsumer, - private val coroutineScope: CoroutineScope, - private val ui: ToolboxUi, - settingsStore: PluginSettingsStore, - secretsStore: PluginSecretStore, ) : RemoteProvider { private val logger = LoggerFactory.getLogger(javaClass) + private val ui: ToolboxUi = serviceLocator.getService(ToolboxUi::class.java) + private val consumer: RemoteEnvironmentConsumer = serviceLocator.getService(RemoteEnvironmentConsumer::class.java) + private val coroutineScope: CoroutineScope = serviceLocator.getService(CoroutineScope::class.java) + private val settingsStore: PluginSettingsStore = serviceLocator.getService(PluginSettingsStore::class.java) + private val secretsStore: PluginSecretStore = serviceLocator.getService(PluginSecretStore::class.java) + // Current polling job. private var pollJob: Job? = null private var lastEnvironments: Set? = null @@ -60,7 +64,7 @@ class CoderRemoteProvider( private val dialogUi = DialogUi(settings, ui) private val linkHandler = LinkHandler(settings, httpClient, dialogUi) - // The REST client, if we are signed in. + // The REST client, if we are signed in private var client: CoderRestClient? = null // If we have an error in the polling we store it here before going back to @@ -96,7 +100,7 @@ class CoderRemoteProvider( it.name }?.map { agent -> // If we have an environment already, update that. - val env = CoderRemoteEnvironment(client, ws, agent, ui) + val env = CoderRemoteEnvironment(serviceLocator, client, ws, agent, coroutineScope) lastEnvironments?.firstOrNull { it == env }?.let { it.update(ws, agent) it @@ -146,7 +150,6 @@ class CoderRemoteProvider( // rememberMe to false so we do not try to automatically log in. secrets.rememberMe = "false" close() - reset() } /** @@ -182,7 +185,7 @@ class CoderRemoteProvider( consumer.consumeEnvironments(emptyList(), true) } - override fun getName(): String = "Coder Gateway" + override fun getName(): String = "Coder" override fun getSvgIcon(): SvgIcon = SvgIcon(this::class.java.getResourceAsStream("/icon.svg")?.readAllBytes() ?: byteArrayOf()) @@ -208,7 +211,7 @@ class CoderRemoteProvider( * Just displays the deployment URL at the moment, but we could use this as * a form for creating new environments. */ - override fun getNewEnvironmentUiPage(): UiPage = NewEnvironmentPage(client?.url?.toString()) + override fun getNewEnvironmentUiPage(): UiPage = NewEnvironmentPage(getDeploymentURL()?.first) /** * We always show a list of environments. @@ -251,9 +254,8 @@ class CoderRemoteProvider( * ui.hideUiPage() which stacks and has built-in back navigation, rather * than using multiple root pages. */ - private fun reset() { - // TODO - check this later -// ui.showPluginEnvironmentsPage() + private fun goToEnvironmentsPage() { + serviceLocator.getService(EnvironmentUiPageManager::class.java).showPluginEnvironmentsPage() } /** @@ -309,7 +311,7 @@ class CoderRemoteProvider( settings, httpClient, coroutineScope, - { reset() }, + ::goToEnvironmentsPage, ) { client, cli -> // Store the URL and token for use next time. secrets.lastDeploymentURL = client.url.toString() @@ -320,7 +322,7 @@ class CoderRemoteProvider( pollError = null pollJob?.cancel() pollJob = poll(client, cli) - reset() + goToEnvironmentsPage() } /** diff --git a/src/main/kotlin/com/coder/toolbox/CoderToolboxExtension.kt b/src/main/kotlin/com/coder/toolbox/CoderToolboxExtension.kt new file mode 100644 index 0000000..f7e6cd1 --- /dev/null +++ b/src/main/kotlin/com/coder/toolbox/CoderToolboxExtension.kt @@ -0,0 +1,19 @@ +package com.coder.toolbox + +import com.jetbrains.toolbox.api.core.ServiceLocator +import com.jetbrains.toolbox.api.remoteDev.RemoteDevExtension +import com.jetbrains.toolbox.api.remoteDev.RemoteProvider +import okhttp3.OkHttpClient + +/** + * Entry point into the extension. + */ +class CoderToolboxExtension : RemoteDevExtension { + // All services must be passed in here and threaded as necessary. + override fun createRemoteProviderPluginInstance(serviceLocator: ServiceLocator): RemoteProvider { + return CoderRemoteProvider( + serviceLocator, + OkHttpClient(), + ) + } +} \ No newline at end of file diff --git a/src/main/kotlin/com/coder/toolbox/browser/BrowserException.kt b/src/main/kotlin/com/coder/toolbox/browser/BrowserException.kt new file mode 100644 index 0000000..ba9ae4c --- /dev/null +++ b/src/main/kotlin/com/coder/toolbox/browser/BrowserException.kt @@ -0,0 +1,5 @@ +package com.coder.toolbox.browser + +import java.io.IOException + +class BrowserException(msg: String, error: Throwable? = null) : IOException(msg, error) \ No newline at end of file diff --git a/src/main/kotlin/com/coder/toolbox/browser/BrowserUtil.kt b/src/main/kotlin/com/coder/toolbox/browser/BrowserUtil.kt new file mode 100644 index 0000000..57de42f --- /dev/null +++ b/src/main/kotlin/com/coder/toolbox/browser/BrowserUtil.kt @@ -0,0 +1,66 @@ +package com.coder.toolbox.browser + +import com.coder.toolbox.util.OS +import com.coder.toolbox.util.getOS +import org.zeroturnaround.exec.ProcessExecutor + +class BrowserUtil { + companion object { + fun browse(url: String, errorHandler: (BrowserException) -> Unit) { + val os = getOS() + if (os == null) { + errorHandler(BrowserException("Failed to open the URL because we can't detect the OS")) + return + } + when (os) { + OS.LINUX -> linuxBrowse(url, errorHandler) + OS.MAC -> macBrowse(url, errorHandler) + OS.WINDOWS -> windowsBrowse(url, errorHandler) + } + } + + private fun linuxBrowse(url: String, errorHandler: (BrowserException) -> Unit) { + try { + if (OS.LINUX.getDesktopEnvironment()?.uppercase()?.contains("GNOME") == true) { + exec("gnome-open", url) + } else { + exec("xdg-open", url) + } + } catch (e: Exception) { + errorHandler( + BrowserException( + "Failed to open URL because an error was encountered. Please make sure xdg-open from package xdg-utils is available!", + e + ) + ) + } + } + + private fun macBrowse(url: String, errorHandler: (BrowserException) -> Unit) { + try { + exec("open", url) + } catch (e: Exception) { + errorHandler(BrowserException("Failed to open URL because an error was encountered.", e)) + } + } + + private fun windowsBrowse(url: String, errorHandler: (BrowserException) -> Unit) { + try { + exec("cmd", "start \"$url\"") + } catch (e: Exception) { + errorHandler(BrowserException("Failed to open URL because an error was encountered.", e)) + } + } + + private fun exec(vararg args: String): String { + val stdout = + ProcessExecutor() + .command(*args) + .exitValues(0) + .readOutput(true) + .execute() + .outputUTF8() + return stdout + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/com/coder/toolbox/models/WorkspaceAndAgentStatus.kt b/src/main/kotlin/com/coder/toolbox/models/WorkspaceAndAgentStatus.kt index 51bc2a9..63bf37f 100644 --- a/src/main/kotlin/com/coder/toolbox/models/WorkspaceAndAgentStatus.kt +++ b/src/main/kotlin/com/coder/toolbox/models/WorkspaceAndAgentStatus.kt @@ -5,10 +5,11 @@ import com.coder.toolbox.sdk.v2.models.WorkspaceAgent import com.coder.toolbox.sdk.v2.models.WorkspaceAgentLifecycleState import com.coder.toolbox.sdk.v2.models.WorkspaceAgentStatus import com.coder.toolbox.sdk.v2.models.WorkspaceStatus -import com.jetbrains.toolbox.api.core.ui.color.Color +import com.jetbrains.toolbox.api.core.ServiceLocator import com.jetbrains.toolbox.api.core.ui.color.StateColor -import com.jetbrains.toolbox.api.core.ui.color.ThemeColor import com.jetbrains.toolbox.api.remoteDev.states.CustomRemoteEnvironmentState +import com.jetbrains.toolbox.api.remoteDev.states.EnvironmentStateColorPalette +import com.jetbrains.toolbox.api.remoteDev.states.StandardRemoteEnvironmentState /** * WorkspaceAndAgentStatus represents the combined status of a single agent and @@ -57,27 +58,27 @@ enum class WorkspaceAndAgentStatus(val label: String, val description: String) { * Note that a reachable environment will always display "connected" or * "disconnected" regardless of the label we give that status. */ - fun toRemoteEnvironmentState(): CustomRemoteEnvironmentState { - // Use comments; no named arguments for non-Kotlin functions. - // TODO@JB: Is there a set of default colors we could use? + fun toRemoteEnvironmentState(serviceLocator: ServiceLocator): CustomRemoteEnvironmentState { + val stateColor = getStateColor(serviceLocator) return CustomRemoteEnvironmentState( label, - StateColor( - ThemeColor( - Color(0.407f, 0.439f, 0.502f, 1.0f), // lightThemeColor - Color(0.784f, 0.784f, 0.784f, 0.784f), // darkThemeColor - ), - ThemeColor( - Color(0.878f, 0.878f, 0.941f, 0.102f), // darkThemeBackgroundColor - Color(0.878f, 0.878f, 0.961f, 0.980f), // lightThemeBackgroundColor - ) - ), + stateColor, ready(), // reachable // TODO@JB: How does this work? Would like a spinner for pending states. null, // iconId ) } + private fun getStateColor(serviceLocator: ServiceLocator): StateColor { + val colorPalette = serviceLocator.getService(EnvironmentStateColorPalette::class.java) + + + return if (ready()) colorPalette.getColor(StandardRemoteEnvironmentState.Active) + else if (canStart()) colorPalette.getColor(StandardRemoteEnvironmentState.Failed) + else if (pending()) colorPalette.getColor(StandardRemoteEnvironmentState.Activating) + else colorPalette.getColor(StandardRemoteEnvironmentState.Unreachable) + } + /** * Return true if the agent is in a connectable state. */ diff --git a/src/main/kotlin/com/coder/toolbox/plugin/PluginInfo.kt b/src/main/kotlin/com/coder/toolbox/plugin/PluginInfo.kt new file mode 100644 index 0000000..e14f0ab --- /dev/null +++ b/src/main/kotlin/com/coder/toolbox/plugin/PluginInfo.kt @@ -0,0 +1,12 @@ +package com.coder.toolbox.plugin + +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass + +/** + * Small subset representation of extension.json + */ +@JsonClass(generateAdapter = true) +data class PluginInfo( + @Json(name = "id") val id: String, + @Json(name = "version") val version: String) diff --git a/src/main/kotlin/com/coder/toolbox/plugin/PluginManager.kt b/src/main/kotlin/com/coder/toolbox/plugin/PluginManager.kt new file mode 100644 index 0000000..7799d45 --- /dev/null +++ b/src/main/kotlin/com/coder/toolbox/plugin/PluginManager.kt @@ -0,0 +1,27 @@ +package com.coder.toolbox.plugin + +import com.squareup.moshi.Moshi +import java.io.InputStream + +object PluginManager { + + val pluginInfo: PluginInfo by lazy { + loadPluginMetadata() + } + + private fun loadPluginMetadata(): PluginInfo { + val resourcePath = "/extension.json" + val inputStream: InputStream? = PluginManager.javaClass.getResourceAsStream(resourcePath) + ?: throw IllegalArgumentException("Resource not found: $resourcePath") + + if (inputStream == null) { + throw IllegalStateException("Can't load plugin information") + } + + inputStream.use { stream -> + val jsonContent = stream.bufferedReader().readText() + return Moshi.Builder().build().adapter(PluginInfo::class.java).fromJson(jsonContent) + ?: throw IllegalArgumentException("Failed to parse JSON") + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/com/coder/toolbox/sdk/CoderRestClient.kt b/src/main/kotlin/com/coder/toolbox/sdk/CoderRestClient.kt index 7fb8d13..4f4f7e0 100644 --- a/src/main/kotlin/com/coder/toolbox/sdk/CoderRestClient.kt +++ b/src/main/kotlin/com/coder/toolbox/sdk/CoderRestClient.kt @@ -30,7 +30,7 @@ import retrofit2.converter.moshi.MoshiConverterFactory import java.net.HttpURLConnection import java.net.ProxySelector import java.net.URL -import java.util.UUID +import java.util.* import javax.net.ssl.X509TrustManager /** @@ -92,7 +92,11 @@ open class CoderRestClient( } if (token != null) { - builder = builder.addInterceptor { it.proceed(it.request().newBuilder().addHeader("Coder-Session-Token", token).build()) } + builder = builder.addInterceptor { + it.proceed( + it.request().newBuilder().addHeader("Coder-Session-Token", token).build() + ) + } } httpClient = @@ -103,7 +107,7 @@ open class CoderRestClient( it.proceed( it.request().newBuilder().addHeader( "User-Agent", - "Coder Gateway/$pluginVersion (${getOS()}; ${getArch()})", + "Coder Toolbox/$pluginVersion (${getOS()}; ${getArch()})", ).build(), ) } @@ -185,7 +189,8 @@ open class CoderRestClient( * @throws [APIResponseException]. */ fun resources(workspace: Workspace): List { - val resourcesResponse = retroRestClient.templateVersionResources(workspace.latestBuild.templateVersionID).execute() + val resourcesResponse = + retroRestClient.templateVersionResources(workspace.latestBuild.templateVersionID).execute() if (!resourcesResponse.isSuccessful) { throw APIResponseException("retrieve resources for ${workspace.name}", url, resourcesResponse) } diff --git a/src/main/kotlin/com/coder/toolbox/settings/CoderSettings.kt b/src/main/kotlin/com/coder/toolbox/settings/CoderSettings.kt index 94c64f3..209fd55 100644 --- a/src/main/kotlin/com/coder/toolbox/settings/CoderSettings.kt +++ b/src/main/kotlin/com/coder/toolbox/settings/CoderSettings.kt @@ -334,14 +334,14 @@ open class CoderSettings( val dataDir: Path get() { return when (getOS()) { - OS.WINDOWS -> Paths.get(env.get("LOCALAPPDATA"), "coder-gateway") - OS.MAC -> Paths.get(env.get("HOME"), "Library/Application Support/coder-gateway") + OS.WINDOWS -> Paths.get(env.get("LOCALAPPDATA"), "coder-toolbox") + OS.MAC -> Paths.get(env.get("HOME"), "Library/Application Support/coder-toolbox") else -> { val dir = env.get("XDG_DATA_HOME") if (dir.isNotBlank()) { - return Paths.get(dir, "coder-gateway") + return Paths.get(dir, "coder-toolbox") } - return Paths.get(env.get("HOME"), ".local/share/coder-gateway") + return Paths.get(env.get("HOME"), ".local/share/coder-toolbox") } } } diff --git a/src/main/kotlin/com/coder/toolbox/util/Dialogs.kt b/src/main/kotlin/com/coder/toolbox/util/Dialogs.kt index 65df544..886ce45 100644 --- a/src/main/kotlin/com/coder/toolbox/util/Dialogs.kt +++ b/src/main/kotlin/com/coder/toolbox/util/Dialogs.kt @@ -1,5 +1,6 @@ package com.coder.toolbox.util +import com.coder.toolbox.browser.BrowserUtil import com.coder.toolbox.settings.CoderSettings import com.coder.toolbox.settings.Source import com.jetbrains.toolbox.api.ui.ToolboxUi @@ -35,7 +36,9 @@ class DialogUi( private fun openUrl(url: URL) { // TODO - check this later -// ui.openUrl(url.toString()) + BrowserUtil.browse(url.toString()) { + ui.showErrorInfoPopup(it) + } } /** diff --git a/src/main/kotlin/com/coder/toolbox/util/LinkHandler.kt b/src/main/kotlin/com/coder/toolbox/util/LinkHandler.kt index 1663da4..128c26d 100644 --- a/src/main/kotlin/com/coder/toolbox/util/LinkHandler.kt +++ b/src/main/kotlin/com/coder/toolbox/util/LinkHandler.kt @@ -2,6 +2,7 @@ package com.coder.toolbox.util import com.coder.toolbox.cli.ensureCLI import com.coder.toolbox.models.WorkspaceAndAgentStatus +import com.coder.toolbox.plugin.PluginManager import com.coder.toolbox.sdk.CoderRestClient import com.coder.toolbox.sdk.ex.APIResponseException import com.coder.toolbox.sdk.v2.models.Workspace @@ -146,8 +147,14 @@ open class LinkHandler( } // The http client Toolbox gives us is already set up with the // proxy config, so we do net need to explicitly add it. - // TODO: How to get the plugin version? - val client = CoderRestClient(deploymentURL.toURL(), token?.first, settings, proxyValues = null, "production", httpClient) + val client = CoderRestClient( + deploymentURL.toURL(), + token?.first, + settings, + proxyValues = null, + PluginManager.pluginInfo.version, + httpClient + ) return try { client.authenticate() client diff --git a/src/main/kotlin/com/coder/toolbox/util/OS.kt b/src/main/kotlin/com/coder/toolbox/util/OS.kt index 9fdc334..32abd5e 100644 --- a/src/main/kotlin/com/coder/toolbox/util/OS.kt +++ b/src/main/kotlin/com/coder/toolbox/util/OS.kt @@ -1,6 +1,6 @@ package com.coder.toolbox.util -import java.util.Locale +import java.util.* fun getOS(): OS? = OS.from(System.getProperty("os.name")) @@ -9,8 +9,19 @@ fun getArch(): Arch? = Arch.from(System.getProperty("os.arch").lowercase(Locale. enum class OS { WINDOWS, LINUX, - MAC, - ; + MAC; + + /** + * The name of the current desktop environment. + * For Linux systems it can be GNOME, KDE, XFCE, LXDE, and so on, + * while for macOS it will be Aqua and Windows Shell for Windows. + */ + fun getDesktopEnvironment(): String? = + when (this) { + WINDOWS -> "Windows Shell" + MAC -> "Aqua" + LINUX -> System.getenv("XDG_CURRENT_DESKTOP") + } companion object { fun from(os: String): OS? = when { diff --git a/src/main/kotlin/com/coder/toolbox/views/CoderPage.kt b/src/main/kotlin/com/coder/toolbox/views/CoderPage.kt index 538242f..59b19d4 100644 --- a/src/main/kotlin/com/coder/toolbox/views/CoderPage.kt +++ b/src/main/kotlin/com/coder/toolbox/views/CoderPage.kt @@ -90,12 +90,12 @@ class Action( private val label: String, private val closesPage: Boolean = false, private val enabled: () -> Boolean = { true }, - private val cb: () -> Unit, + private val actionBlock: () -> Unit, ) : RunnableActionDescription { override fun getLabel(): String = label override fun getShouldClosePage(): Boolean = closesPage override fun isEnabled(): Boolean = enabled() override fun run() { - cb() + actionBlock() } } diff --git a/src/main/kotlin/com/coder/toolbox/views/ConnectPage.kt b/src/main/kotlin/com/coder/toolbox/views/ConnectPage.kt index 08d4c52..fcf51b1 100644 --- a/src/main/kotlin/com/coder/toolbox/views/ConnectPage.kt +++ b/src/main/kotlin/com/coder/toolbox/views/ConnectPage.kt @@ -2,6 +2,7 @@ package com.coder.toolbox.views import com.coder.toolbox.cli.CoderCLIManager import com.coder.toolbox.cli.ensureCLI +import com.coder.toolbox.plugin.PluginManager import com.coder.toolbox.sdk.CoderRestClient import com.coder.toolbox.settings.CoderSettings import com.coder.toolbox.util.humanizeConnectionError @@ -83,8 +84,14 @@ class ConnectPage( try { // The http client Toolbox gives us is already set up with the // proxy config, so we do net need to explicitly add it. - // TODO: How to get the plugin version? - val client = CoderRestClient(url, token, settings, proxyValues = null, "production", httpClient) + val client = CoderRestClient( + url, + token, + settings, + proxyValues = null, + PluginManager.pluginInfo.version, + httpClient + ) client.authenticate() updateStatus("Checking Coder binary...", error = null) val cli = ensureCLI(client.url, client.buildVersion, settings) { status -> @@ -96,6 +103,7 @@ class ConnectPage( cli.login(client.token) } onConnect(client, cli) + } catch (ex: Exception) { val msg = humanizeConnectionError(url, settings.requireTokenAuth, ex) notify("Failed to configure ${url.host}", ex) diff --git a/src/main/resources/META-INF/services/com.jetbrains.toolbox.api.remoteDev.RemoteDevExtension b/src/main/resources/META-INF/services/com.jetbrains.toolbox.api.remoteDev.RemoteDevExtension index 56009c4..f545568 100644 --- a/src/main/resources/META-INF/services/com.jetbrains.toolbox.api.remoteDev.RemoteDevExtension +++ b/src/main/resources/META-INF/services/com.jetbrains.toolbox.api.remoteDev.RemoteDevExtension @@ -1 +1 @@ -com.coder.toolbox.CoderGatewayExtension +com.coder.toolbox.CoderToolboxExtension diff --git a/src/test/fixtures/outputs/append-blank-newlines.conf b/src/test/fixtures/outputs/append-blank-newlines.conf index 93543e1..bc0fb6d 100644 --- a/src/test/fixtures/outputs/append-blank-newlines.conf +++ b/src/test/fixtures/outputs/append-blank-newlines.conf @@ -4,14 +4,14 @@ # --- START CODER JETBRAINS test.coder.invalid Host coder-jetbrains--foo-bar--test.coder.invalid - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains foo-bar + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains foo-bar ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null LogLevel ERROR SetEnv CODER_SSH_SESSION_TYPE=JetBrains Host coder-jetbrains--foo-bar--test.coder.invalid--bg - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=disable foo-bar + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=disable foo-bar ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null diff --git a/src/test/fixtures/outputs/append-blank.conf b/src/test/fixtures/outputs/append-blank.conf index efd48b6..fce1a66 100644 --- a/src/test/fixtures/outputs/append-blank.conf +++ b/src/test/fixtures/outputs/append-blank.conf @@ -1,13 +1,13 @@ # --- START CODER JETBRAINS test.coder.invalid Host coder-jetbrains--foo-bar--test.coder.invalid - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains foo-bar + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains foo-bar ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null LogLevel ERROR SetEnv CODER_SSH_SESSION_TYPE=JetBrains Host coder-jetbrains--foo-bar--test.coder.invalid--bg - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=disable foo-bar + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=disable foo-bar ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null diff --git a/src/test/fixtures/outputs/append-no-blocks.conf b/src/test/fixtures/outputs/append-no-blocks.conf index 039e535..b62b8f3 100644 --- a/src/test/fixtures/outputs/append-no-blocks.conf +++ b/src/test/fixtures/outputs/append-no-blocks.conf @@ -5,14 +5,14 @@ Host test2 # --- START CODER JETBRAINS test.coder.invalid Host coder-jetbrains--foo-bar--test.coder.invalid - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains foo-bar + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains foo-bar ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null LogLevel ERROR SetEnv CODER_SSH_SESSION_TYPE=JetBrains Host coder-jetbrains--foo-bar--test.coder.invalid--bg - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=disable foo-bar + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=disable foo-bar ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null diff --git a/src/test/fixtures/outputs/append-no-newline.conf b/src/test/fixtures/outputs/append-no-newline.conf index 36c0fa7..0457f71 100644 --- a/src/test/fixtures/outputs/append-no-newline.conf +++ b/src/test/fixtures/outputs/append-no-newline.conf @@ -4,14 +4,14 @@ Host test2 Port 443 # --- START CODER JETBRAINS test.coder.invalid Host coder-jetbrains--foo-bar--test.coder.invalid - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains foo-bar + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains foo-bar ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null LogLevel ERROR SetEnv CODER_SSH_SESSION_TYPE=JetBrains Host coder-jetbrains--foo-bar--test.coder.invalid--bg - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=disable foo-bar + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=disable foo-bar ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null diff --git a/src/test/fixtures/outputs/append-no-related-blocks.conf b/src/test/fixtures/outputs/append-no-related-blocks.conf index 84ecee9..a7fdf4c 100644 --- a/src/test/fixtures/outputs/append-no-related-blocks.conf +++ b/src/test/fixtures/outputs/append-no-related-blocks.conf @@ -11,14 +11,14 @@ some jetbrains config # --- START CODER JETBRAINS test.coder.invalid Host coder-jetbrains--foo-bar--test.coder.invalid - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains foo-bar + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains foo-bar ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null LogLevel ERROR SetEnv CODER_SSH_SESSION_TYPE=JetBrains Host coder-jetbrains--foo-bar--test.coder.invalid--bg - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=disable foo-bar + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=disable foo-bar ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null diff --git a/src/test/fixtures/outputs/disable-autostart.conf b/src/test/fixtures/outputs/disable-autostart.conf index b7e095f..575fdc4 100644 --- a/src/test/fixtures/outputs/disable-autostart.conf +++ b/src/test/fixtures/outputs/disable-autostart.conf @@ -1,13 +1,13 @@ # --- START CODER JETBRAINS test.coder.invalid Host coder-jetbrains--foo--test.coder.invalid - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --disable-autostart --usage-app=jetbrains foo + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --disable-autostart --usage-app=jetbrains foo ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null LogLevel ERROR SetEnv CODER_SSH_SESSION_TYPE=JetBrains Host coder-jetbrains--foo--test.coder.invalid--bg - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --disable-autostart --usage-app=disable foo + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --disable-autostart --usage-app=disable foo ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null diff --git a/src/test/fixtures/outputs/extra-config.conf b/src/test/fixtures/outputs/extra-config.conf index 03ff48a..cc5eb1d 100644 --- a/src/test/fixtures/outputs/extra-config.conf +++ b/src/test/fixtures/outputs/extra-config.conf @@ -1,6 +1,6 @@ # --- START CODER JETBRAINS test.coder.invalid Host coder-jetbrains--extra--test.coder.invalid - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains extra + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains extra ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null @@ -9,7 +9,7 @@ Host coder-jetbrains--extra--test.coder.invalid ServerAliveInterval 5 ServerAliveCountMax 3 Host coder-jetbrains--extra--test.coder.invalid--bg - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=disable extra + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=disable extra ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null diff --git a/src/test/fixtures/outputs/header-command-windows.conf b/src/test/fixtures/outputs/header-command-windows.conf index 47a1790..f9c2714 100644 --- a/src/test/fixtures/outputs/header-command-windows.conf +++ b/src/test/fixtures/outputs/header-command-windows.conf @@ -1,13 +1,13 @@ # --- START CODER JETBRAINS test.coder.invalid Host coder-jetbrains--header--test.coder.invalid - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid --header-command "\"C:\Program Files\My Header Command\HeaderCommand.exe\" --url=\"%%CODER_URL%%\" --test=\"foo bar\"" ssh --stdio --usage-app=jetbrains header + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid --header-command "\"C:\Program Files\My Header Command\HeaderCommand.exe\" --url=\"%%CODER_URL%%\" --test=\"foo bar\"" ssh --stdio --usage-app=jetbrains header ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null LogLevel ERROR SetEnv CODER_SSH_SESSION_TYPE=JetBrains Host coder-jetbrains--header--test.coder.invalid--bg - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid --header-command "\"C:\Program Files\My Header Command\HeaderCommand.exe\" --url=\"%%CODER_URL%%\" --test=\"foo bar\"" ssh --stdio --usage-app=disable header + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid --header-command "\"C:\Program Files\My Header Command\HeaderCommand.exe\" --url=\"%%CODER_URL%%\" --test=\"foo bar\"" ssh --stdio --usage-app=disable header ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null diff --git a/src/test/fixtures/outputs/header-command.conf b/src/test/fixtures/outputs/header-command.conf index fb85cc6..de24f71 100644 --- a/src/test/fixtures/outputs/header-command.conf +++ b/src/test/fixtures/outputs/header-command.conf @@ -1,13 +1,13 @@ # --- START CODER JETBRAINS test.coder.invalid Host coder-jetbrains--header--test.coder.invalid - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid --header-command 'my-header-command --url="$CODER_URL" --test="foo bar" --literal='\''$CODER_URL'\''' ssh --stdio --usage-app=jetbrains header + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid --header-command 'my-header-command --url="$CODER_URL" --test="foo bar" --literal='\''$CODER_URL'\''' ssh --stdio --usage-app=jetbrains header ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null LogLevel ERROR SetEnv CODER_SSH_SESSION_TYPE=JetBrains Host coder-jetbrains--header--test.coder.invalid--bg - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid --header-command 'my-header-command --url="$CODER_URL" --test="foo bar" --literal='\''$CODER_URL'\''' ssh --stdio --usage-app=disable header + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid --header-command 'my-header-command --url="$CODER_URL" --test="foo bar" --literal='\''$CODER_URL'\''' ssh --stdio --usage-app=disable header ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null diff --git a/src/test/fixtures/outputs/log-dir.conf b/src/test/fixtures/outputs/log-dir.conf index 669b7b2..233e0f3 100644 --- a/src/test/fixtures/outputs/log-dir.conf +++ b/src/test/fixtures/outputs/log-dir.conf @@ -1,13 +1,13 @@ # --- START CODER JETBRAINS test.coder.invalid Host coder-jetbrains--foo--test.coder.invalid - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --log-dir /tmp/coder-gateway/test.coder.invalid/logs --usage-app=jetbrains foo + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --log-dir /tmp/coder-toolbox/test.coder.invalid/logs --usage-app=jetbrains foo ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null LogLevel ERROR SetEnv CODER_SSH_SESSION_TYPE=JetBrains Host coder-jetbrains--foo--test.coder.invalid--bg - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=disable foo + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=disable foo ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null diff --git a/src/test/fixtures/outputs/multiple-workspaces.conf b/src/test/fixtures/outputs/multiple-workspaces.conf index 40962c0..aeba6d6 100644 --- a/src/test/fixtures/outputs/multiple-workspaces.conf +++ b/src/test/fixtures/outputs/multiple-workspaces.conf @@ -1,27 +1,27 @@ # --- START CODER JETBRAINS test.coder.invalid Host coder-jetbrains--foo--test.coder.invalid - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains foo + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains foo ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null LogLevel ERROR SetEnv CODER_SSH_SESSION_TYPE=JetBrains Host coder-jetbrains--foo--test.coder.invalid--bg - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=disable foo + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=disable foo ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null LogLevel ERROR SetEnv CODER_SSH_SESSION_TYPE=JetBrains Host coder-jetbrains--bar--test.coder.invalid - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains bar + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains bar ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null LogLevel ERROR SetEnv CODER_SSH_SESSION_TYPE=JetBrains Host coder-jetbrains--bar--test.coder.invalid--bg - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=disable bar + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=disable bar ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null diff --git a/src/test/fixtures/outputs/no-disable-autostart.conf b/src/test/fixtures/outputs/no-disable-autostart.conf index ddcfc0e..c9039f6 100644 --- a/src/test/fixtures/outputs/no-disable-autostart.conf +++ b/src/test/fixtures/outputs/no-disable-autostart.conf @@ -1,13 +1,13 @@ # --- START CODER JETBRAINS test.coder.invalid Host coder-jetbrains--foo--test.coder.invalid - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains foo + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains foo ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null LogLevel ERROR SetEnv CODER_SSH_SESSION_TYPE=JetBrains Host coder-jetbrains--foo--test.coder.invalid--bg - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=disable foo + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=disable foo ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null diff --git a/src/test/fixtures/outputs/no-report-usage.conf b/src/test/fixtures/outputs/no-report-usage.conf index 7e48a61..0f89b24 100644 --- a/src/test/fixtures/outputs/no-report-usage.conf +++ b/src/test/fixtures/outputs/no-report-usage.conf @@ -1,13 +1,13 @@ # --- START CODER JETBRAINS test.coder.invalid Host coder-jetbrains--foo--test.coder.invalid - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio foo + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio foo ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null LogLevel ERROR SetEnv CODER_SSH_SESSION_TYPE=JetBrains Host coder-jetbrains--foo--test.coder.invalid--bg - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio foo + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio foo ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null diff --git a/src/test/fixtures/outputs/replace-end-no-newline.conf b/src/test/fixtures/outputs/replace-end-no-newline.conf index 32bb8d3..ffb69fc 100644 --- a/src/test/fixtures/outputs/replace-end-no-newline.conf +++ b/src/test/fixtures/outputs/replace-end-no-newline.conf @@ -3,14 +3,14 @@ Host test Host test2 Port 443 # --- START CODER JETBRAINS test.coder.invalid Host coder-jetbrains--foo-bar--test.coder.invalid - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains foo-bar + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains foo-bar ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null LogLevel ERROR SetEnv CODER_SSH_SESSION_TYPE=JetBrains Host coder-jetbrains--foo-bar--test.coder.invalid--bg - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=disable foo-bar + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=disable foo-bar ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null diff --git a/src/test/fixtures/outputs/replace-end.conf b/src/test/fixtures/outputs/replace-end.conf index 36c0fa7..0457f71 100644 --- a/src/test/fixtures/outputs/replace-end.conf +++ b/src/test/fixtures/outputs/replace-end.conf @@ -4,14 +4,14 @@ Host test2 Port 443 # --- START CODER JETBRAINS test.coder.invalid Host coder-jetbrains--foo-bar--test.coder.invalid - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains foo-bar + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains foo-bar ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null LogLevel ERROR SetEnv CODER_SSH_SESSION_TYPE=JetBrains Host coder-jetbrains--foo-bar--test.coder.invalid--bg - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=disable foo-bar + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=disable foo-bar ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null diff --git a/src/test/fixtures/outputs/replace-middle-ignore-unrelated.conf b/src/test/fixtures/outputs/replace-middle-ignore-unrelated.conf index 19b7075..10b8e58 100644 --- a/src/test/fixtures/outputs/replace-middle-ignore-unrelated.conf +++ b/src/test/fixtures/outputs/replace-middle-ignore-unrelated.conf @@ -5,14 +5,14 @@ some coder config # ------------END-CODER------------ # --- START CODER JETBRAINS test.coder.invalid Host coder-jetbrains--foo-bar--test.coder.invalid - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains foo-bar + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains foo-bar ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null LogLevel ERROR SetEnv CODER_SSH_SESSION_TYPE=JetBrains Host coder-jetbrains--foo-bar--test.coder.invalid--bg - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=disable foo-bar + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=disable foo-bar ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null diff --git a/src/test/fixtures/outputs/replace-middle.conf b/src/test/fixtures/outputs/replace-middle.conf index 841f05a..d06d640 100644 --- a/src/test/fixtures/outputs/replace-middle.conf +++ b/src/test/fixtures/outputs/replace-middle.conf @@ -2,14 +2,14 @@ Host test Port 80 # --- START CODER JETBRAINS test.coder.invalid Host coder-jetbrains--foo-bar--test.coder.invalid - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains foo-bar + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains foo-bar ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null LogLevel ERROR SetEnv CODER_SSH_SESSION_TYPE=JetBrains Host coder-jetbrains--foo-bar--test.coder.invalid--bg - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=disable foo-bar + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=disable foo-bar ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null diff --git a/src/test/fixtures/outputs/replace-only.conf b/src/test/fixtures/outputs/replace-only.conf index efd48b6..fce1a66 100644 --- a/src/test/fixtures/outputs/replace-only.conf +++ b/src/test/fixtures/outputs/replace-only.conf @@ -1,13 +1,13 @@ # --- START CODER JETBRAINS test.coder.invalid Host coder-jetbrains--foo-bar--test.coder.invalid - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains foo-bar + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains foo-bar ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null LogLevel ERROR SetEnv CODER_SSH_SESSION_TYPE=JetBrains Host coder-jetbrains--foo-bar--test.coder.invalid--bg - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=disable foo-bar + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=disable foo-bar ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null diff --git a/src/test/fixtures/outputs/replace-start.conf b/src/test/fixtures/outputs/replace-start.conf index b5fcc92..61508f0 100644 --- a/src/test/fixtures/outputs/replace-start.conf +++ b/src/test/fixtures/outputs/replace-start.conf @@ -1,13 +1,13 @@ # --- START CODER JETBRAINS test.coder.invalid Host coder-jetbrains--foo-bar--test.coder.invalid - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains foo-bar + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=jetbrains foo-bar ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null LogLevel ERROR SetEnv CODER_SSH_SESSION_TYPE=JetBrains Host coder-jetbrains--foo-bar--test.coder.invalid--bg - ProxyCommand /tmp/coder-gateway/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-gateway/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=disable foo-bar + ProxyCommand /tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64 --global-config /tmp/coder-toolbox/test.coder.invalid/config --url https://test.coder.invalid ssh --stdio --usage-app=disable foo-bar ConnectTimeout 0 StrictHostKeyChecking no UserKnownHostsFile /dev/null diff --git a/src/test/kotlin/com/coder/toolbox/cli/CoderCLIManagerTest.kt b/src/test/kotlin/com/coder/toolbox/cli/CoderCLIManagerTest.kt index 6f855ac..6eef3e9 100644 --- a/src/test/kotlin/com/coder/toolbox/cli/CoderCLIManagerTest.kt +++ b/src/test/kotlin/com/coder/toolbox/cli/CoderCLIManagerTest.kt @@ -151,7 +151,7 @@ internal class CoderCLIManagerTest { // download a working CLI and that it runs on each platform. @Test fun testDownloadRealCLI() { - var url = System.getenv("CODER_GATEWAY_TEST_DEPLOYMENT") + var url = System.getenv("CODER_TOOLBOX_TEST_DEPLOYMENT") if (url == "mock") { return } else if (url == null) { @@ -424,11 +424,11 @@ internal class CoderCLIManagerTest { val expectedConf = Path.of("src/test/fixtures/outputs/").resolve(it.output + ".conf").toFile().readText() .replace(newlineRe, System.lineSeparator()) - .replace("/tmp/coder-gateway/test.coder.invalid/config", escape(coderConfigPath.toString())) - .replace("/tmp/coder-gateway/test.coder.invalid/coder-linux-amd64", escape(ccm.localBinaryPath.toString())) + .replace("/tmp/coder-toolbox/test.coder.invalid/config", escape(coderConfigPath.toString())) + .replace("/tmp/coder-toolbox/test.coder.invalid/coder-linux-amd64", escape(ccm.localBinaryPath.toString())) .let { conf -> if (it.sshLogDirectory != null) { - conf.replace("/tmp/coder-gateway/test.coder.invalid/logs", it.sshLogDirectory.toString()) + conf.replace("/tmp/coder-toolbox/test.coder.invalid/logs", it.sshLogDirectory.toString()) } else { conf } @@ -787,7 +787,7 @@ internal class CoderCLIManagerTest { } companion object { - private val tmpdir: Path = Path.of(System.getProperty("java.io.tmpdir")).resolve("coder-gateway-test/cli-manager") + private val tmpdir: Path = Path.of(System.getProperty("java.io.tmpdir")).resolve("coder-toolbox-test/cli-manager") @JvmStatic @BeforeAll diff --git a/src/test/kotlin/com/coder/toolbox/settings/CoderSettingsTest.kt b/src/test/kotlin/com/coder/toolbox/settings/CoderSettingsTest.kt index e1bcdaa..7e6e3f1 100644 --- a/src/test/kotlin/com/coder/toolbox/settings/CoderSettingsTest.kt +++ b/src/test/kotlin/com/coder/toolbox/settings/CoderSettingsTest.kt @@ -18,12 +18,12 @@ internal class CoderSettingsTest { val url = URL("http://localhost") val home = Path.of(System.getProperty("user.home")) - state.binaryDirectory = Path.of("~/coder-gateway-test/expand-bin-dir").toString() - var expected = home.resolve("coder-gateway-test/expand-bin-dir/localhost") + state.binaryDirectory = Path.of("~/coder-toolbox-test/expand-bin-dir").toString() + var expected = home.resolve("coder-toolbox-test/expand-bin-dir/localhost") assertEquals(expected.toAbsolutePath(), settings.binPath(url).parent) - state.dataDirectory = Path.of("~/coder-gateway-test/expand-data-dir").toString() - expected = home.resolve("coder-gateway-test/expand-data-dir/localhost") + state.dataDirectory = Path.of("~/coder-toolbox-test/expand-data-dir").toString() + expected = home.resolve("coder-toolbox-test/expand-data-dir/localhost") assertEquals(expected.toAbsolutePath(), settings.dataDir(url)) } @@ -37,17 +37,17 @@ internal class CoderSettingsTest { env = Environment( mapOf( - "LOCALAPPDATA" to "/tmp/coder-gateway-test/localappdata", - "HOME" to "/tmp/coder-gateway-test/home", - "XDG_DATA_HOME" to "/tmp/coder-gateway-test/xdg-data", + "LOCALAPPDATA" to "/tmp/coder-toolbox-test/localappdata", + "HOME" to "/tmp/coder-toolbox-test/home", + "XDG_DATA_HOME" to "/tmp/coder-toolbox-test/xdg-data", ), ), ) var expected = when (getOS()) { - OS.WINDOWS -> "/tmp/coder-gateway-test/localappdata/coder-gateway/localhost" - OS.MAC -> "/tmp/coder-gateway-test/home/Library/Application Support/coder-gateway/localhost" - else -> "/tmp/coder-gateway-test/xdg-data/coder-gateway/localhost" + OS.WINDOWS -> "/tmp/coder-toolbox-test/localappdata/coder-toolbox/localhost" + OS.MAC -> "/tmp/coder-toolbox-test/home/Library/Application Support/coder-toolbox/localhost" + else -> "/tmp/coder-toolbox-test/xdg-data/coder-toolbox/localhost" } assertEquals(Path.of(expected).toAbsolutePath(), settings.dataDir(url)) @@ -62,18 +62,18 @@ internal class CoderSettingsTest { Environment( mapOf( "XDG_DATA_HOME" to "", - "HOME" to "/tmp/coder-gateway-test/home", + "HOME" to "/tmp/coder-toolbox-test/home", ), ), ) - expected = "/tmp/coder-gateway-test/home/.local/share/coder-gateway/localhost" + expected = "/tmp/coder-toolbox-test/home/.local/share/coder-toolbox/localhost" assertEquals(Path.of(expected).toAbsolutePath(), settings.dataDir(url)) assertEquals(Path.of(expected).toAbsolutePath(), settings.binPath(url).parent) } // Override environment with settings. - state.dataDirectory = "/tmp/coder-gateway-test/data-dir" + state.dataDirectory = "/tmp/coder-toolbox-test/data-dir" settings = CoderSettings( state, @@ -86,15 +86,15 @@ internal class CoderSettingsTest { ), ), ) - expected = "/tmp/coder-gateway-test/data-dir/localhost" + expected = "/tmp/coder-toolbox-test/data-dir/localhost" assertEquals(Path.of(expected).toAbsolutePath(), settings.dataDir(url)) assertEquals(Path.of(expected).toAbsolutePath(), settings.binPath(url).parent) // Check that the URL is encoded and includes the port, also omit environment. val newUrl = URL("https://dev.😉-coder.com:8080") - state.dataDirectory = "/tmp/coder-gateway-test/data-dir" + state.dataDirectory = "/tmp/coder-toolbox-test/data-dir" settings = CoderSettings(state) - expected = "/tmp/coder-gateway-test/data-dir/dev.xn---coder-vx74e.com-8080" + expected = "/tmp/coder-toolbox-test/data-dir/dev.xn---coder-vx74e.com-8080" assertEquals(Path.of(expected).toAbsolutePath(), settings.dataDir(newUrl)) assertEquals(Path.of(expected).toAbsolutePath(), settings.binPath(newUrl).parent) } @@ -109,14 +109,14 @@ internal class CoderSettingsTest { val url = URL("http://localhost") // Override with settings. - state.binaryDirectory = "/tmp/coder-gateway-test/bin-dir" - var expected = "/tmp/coder-gateway-test/bin-dir/localhost" + state.binaryDirectory = "/tmp/coder-toolbox-test/bin-dir" + var expected = "/tmp/coder-toolbox-test/bin-dir/localhost" assertEquals(Path.of(expected).toAbsolutePath(), settings.binPath(url).parent) assertEquals(Path.of(expected).toAbsolutePath(), settings2.binPath(url).parent) // Second argument bypasses override. - state.dataDirectory = "/tmp/coder-gateway-test/data-dir" - expected = "/tmp/coder-gateway-test/data-dir/localhost" + state.dataDirectory = "/tmp/coder-toolbox-test/data-dir" + expected = "/tmp/coder-toolbox-test/data-dir/localhost" assertEquals(Path.of(expected).toAbsolutePath(), settings.binPath(url, true).parent) assertEquals(Path.of(expected).toAbsolutePath(), settings2.binPath(url, true).parent) @@ -133,17 +133,17 @@ internal class CoderSettingsTest { env = Environment( mapOf( - "APPDATA" to "/tmp/coder-gateway-test/cli-appdata", - "HOME" to "/tmp/coder-gateway-test/cli-home", - "XDG_CONFIG_HOME" to "/tmp/coder-gateway-test/cli-xdg-config", + "APPDATA" to "/tmp/coder-toolbox-test/cli-appdata", + "HOME" to "/tmp/coder-toolbox-test/cli-home", + "XDG_CONFIG_HOME" to "/tmp/coder-toolbox-test/cli-xdg-config", ), ), ) var expected = when (getOS()) { - OS.WINDOWS -> "/tmp/coder-gateway-test/cli-appdata/coderv2" - OS.MAC -> "/tmp/coder-gateway-test/cli-home/Library/Application Support/coderv2" - else -> "/tmp/coder-gateway-test/cli-xdg-config/coderv2" + OS.WINDOWS -> "/tmp/coder-toolbox-test/cli-appdata/coderv2" + OS.MAC -> "/tmp/coder-toolbox-test/cli-home/Library/Application Support/coderv2" + else -> "/tmp/coder-toolbox-test/cli-xdg-config/coderv2" } assertEquals(Path.of(expected), settings.coderConfigDir) @@ -156,11 +156,11 @@ internal class CoderSettingsTest { Environment( mapOf( "XDG_CONFIG_HOME" to "", - "HOME" to "/tmp/coder-gateway-test/cli-home", + "HOME" to "/tmp/coder-toolbox-test/cli-home", ), ), ) - expected = "/tmp/coder-gateway-test/cli-home/.config/coderv2" + expected = "/tmp/coder-toolbox-test/cli-home/.config/coderv2" assertEquals(Path.of(expected), settings.coderConfigDir) } @@ -171,14 +171,14 @@ internal class CoderSettingsTest { env = Environment( mapOf( - "CODER_CONFIG_DIR" to "/tmp/coder-gateway-test/coder-config-dir", + "CODER_CONFIG_DIR" to "/tmp/coder-toolbox-test/coder-config-dir", "APPDATA" to "/ignore", "HOME" to "/ignore", "XDG_CONFIG_HOME" to "/ignore", ), ), ) - expected = "/tmp/coder-gateway-test/coder-config-dir" + expected = "/tmp/coder-toolbox-test/coder-config-dir" assertEquals(Path.of(expected), settings.coderConfigDir) } @@ -207,18 +207,18 @@ internal class CoderSettingsTest { fun testReadConfig() { val tmp = Path.of(System.getProperty("java.io.tmpdir")) - val expected = tmp.resolve("coder-gateway-test/test-config") + val expected = tmp.resolve("coder-toolbox-test/test-config") expected.toFile().mkdirs() - expected.resolve("url").toFile().writeText("http://test.gateway.coder.com$expected") + expected.resolve("url").toFile().writeText("http://test.toolbox.coder.com$expected") expected.resolve("session").toFile().writeText("fake-token") var got = CoderSettings(CoderSettingsState()).readConfig(expected) - assertEquals(Pair("http://test.gateway.coder.com$expected", "fake-token"), got) + assertEquals(Pair("http://test.toolbox.coder.com$expected", "fake-token"), got) // Ignore token if missing. expected.resolve("session").toFile().delete() got = CoderSettings(CoderSettingsState()).readConfig(expected) - assertEquals(Pair("http://test.gateway.coder.com$expected", null), got) + assertEquals(Pair("http://test.toolbox.coder.com$expected", null), got) } @Test @@ -260,7 +260,7 @@ internal class CoderSettingsTest { @Test fun testDefaultURL() { val tmp = Path.of(System.getProperty("java.io.tmpdir")) - val dir = tmp.resolve("coder-gateway-test/test-default-url") + val dir = tmp.resolve("coder-toolbox-test/test-default-url") var env = Environment(mapOf("CODER_CONFIG_DIR" to dir.toString())) dir.toFile().deleteRecursively() @@ -301,7 +301,7 @@ internal class CoderSettingsTest { fun testToken() { val tmp = Path.of(System.getProperty("java.io.tmpdir")) val url = URL("http://test.deployment.coder.com") - val dir = tmp.resolve("coder-gateway-test/test-default-token") + val dir = tmp.resolve("coder-toolbox-test/test-default-token") val env = Environment( mapOf( diff --git a/src/test/kotlin/com/coder/toolbox/util/PathExtensionsTest.kt b/src/test/kotlin/com/coder/toolbox/util/PathExtensionsTest.kt index 70bb154..db0afb5 100644 --- a/src/test/kotlin/com/coder/toolbox/util/PathExtensionsTest.kt +++ b/src/test/kotlin/com/coder/toolbox/util/PathExtensionsTest.kt @@ -32,7 +32,7 @@ internal class PathExtensionsTest { private fun setupDirs(): Path { val tmpdir = Path.of(System.getProperty("java.io.tmpdir")) - .resolve("coder-gateway-test/path-extensions/") + .resolve("coder-toolbox-test/path-extensions/") // Clean up from the last run, if any. tmpdir.toFile().deleteRecursively() @@ -87,7 +87,7 @@ internal class PathExtensionsTest { // Can create under a writable directory. assertTrue(tmpdir.canCreateDirectory()) - assertTrue(tmpdir.resolve("./foo/bar/../../coder-gateway-test/path-extensions").canCreateDirectory()) + assertTrue(tmpdir.resolve("./foo/bar/../../coder-toolbox-test/path-extensions").canCreateDirectory()) assertTrue(tmpdir.resolve("nested/under/dir").canCreateDirectory()) assertTrue(tmpdir.resolve("with space").canCreateDirectory())