mirror of
https://github.com/gravitational/teleport.git
synced 2026-09-24 16:17:11 +08:00
202 lines
7.7 KiB
Go
202 lines
7.7 KiB
Go
/*
|
|
* Teleport
|
|
* Copyright (C) 2025 Gravitational, Inc.
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Affero General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Affero General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
package scripts
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/gravitational/teleport/api/types"
|
|
"github.com/gravitational/teleport/lib/automaticupgrades/version"
|
|
"github.com/gravitational/teleport/lib/utils/teleportassets"
|
|
)
|
|
|
|
func TestGetInstallScript(t *testing.T) {
|
|
ctx := context.Background()
|
|
testVersion, err := version.EnsureSemver("1.2.3")
|
|
require.NoError(t, err)
|
|
testProxyAddr := "proxy.example.com:443"
|
|
|
|
tests := []struct {
|
|
name string
|
|
opts InstallScriptOptions
|
|
assertFn func(t *testing.T, script string)
|
|
}{
|
|
{
|
|
name: "Legacy install, oss",
|
|
opts: InstallScriptOptions{
|
|
AutoupdateStyle: NoAutoupdate,
|
|
TeleportVersion: testVersion,
|
|
TeleportFlavor: types.PackageNameOSS,
|
|
},
|
|
assertFn: func(t *testing.T, script string) {
|
|
require.Contains(t, script, fmt.Sprintf(`TELEPORT_VERSION="%s"`, testVersion))
|
|
require.Contains(t, script, `TELEPORT_SUFFIX=""`)
|
|
require.Contains(t, script, `TELEPORT_EDITION="oss"`)
|
|
},
|
|
},
|
|
{
|
|
name: "Legacy install, enterprise",
|
|
opts: InstallScriptOptions{
|
|
AutoupdateStyle: NoAutoupdate,
|
|
TeleportVersion: testVersion,
|
|
TeleportFlavor: types.PackageNameEnt,
|
|
},
|
|
assertFn: func(t *testing.T, script string) {
|
|
require.Contains(t, script, fmt.Sprintf(`TELEPORT_VERSION="%s"`, testVersion))
|
|
require.Contains(t, script, `TELEPORT_SUFFIX="-ent"`)
|
|
require.Contains(t, script, `TELEPORT_EDITION="enterprise"`)
|
|
},
|
|
},
|
|
{
|
|
name: "Legacy install, cloud",
|
|
opts: InstallScriptOptions{
|
|
AutoupdateStyle: PackageManagerAutoupdate,
|
|
TeleportVersion: testVersion,
|
|
TeleportFlavor: types.PackageNameEnt,
|
|
},
|
|
assertFn: func(t *testing.T, script string) {
|
|
require.Contains(t, script, fmt.Sprintf(`TELEPORT_VERSION="%s"`, testVersion))
|
|
require.Contains(t, script, `TELEPORT_SUFFIX="-ent"`)
|
|
require.Contains(t, script, `TELEPORT_EDITION="cloud"`)
|
|
},
|
|
},
|
|
{
|
|
name: "Oneoff install",
|
|
opts: InstallScriptOptions{
|
|
AutoupdateStyle: UpdaterBinaryAutoupdate,
|
|
TeleportVersion: testVersion,
|
|
ProxyAddr: testProxyAddr,
|
|
TeleportFlavor: types.PackageNameOSS,
|
|
},
|
|
assertFn: func(t *testing.T, script string) {
|
|
require.Contains(t, script, "entrypoint='teleport-update'")
|
|
require.Contains(t, script, fmt.Sprintf("teleportVersion='v%s'", testVersion))
|
|
require.Contains(t, script, fmt.Sprintf("teleportFlavor='%s'", types.PackageNameOSS))
|
|
require.Contains(t, script, fmt.Sprintf("cdnBaseURL='%s'", teleportassets.CDNBaseURL()))
|
|
require.Contains(t, script, fmt.Sprintf("entrypointArgs='enable --proxy %s'", testProxyAddr))
|
|
require.Contains(t, script, "packageSuffix='bin.tar.gz'")
|
|
},
|
|
},
|
|
{
|
|
name: "Oneoff install with group",
|
|
opts: InstallScriptOptions{
|
|
AutoupdateStyle: UpdaterBinaryAutoupdate,
|
|
TeleportVersion: testVersion,
|
|
ProxyAddr: testProxyAddr,
|
|
TeleportFlavor: types.PackageNameOSS,
|
|
Group: "development",
|
|
},
|
|
assertFn: func(t *testing.T, script string) {
|
|
require.Contains(t, script, "entrypoint='teleport-update'")
|
|
require.Contains(t, script, fmt.Sprintf("teleportVersion='v%s'", testVersion))
|
|
require.Contains(t, script, fmt.Sprintf("teleportFlavor='%s'", types.PackageNameOSS))
|
|
require.Contains(t, script, fmt.Sprintf("cdnBaseURL='%s'", teleportassets.CDNBaseURL()))
|
|
require.Contains(t, script, fmt.Sprintf("entrypointArgs='enable --proxy %s --group development'", testProxyAddr))
|
|
require.Contains(t, script, "packageSuffix='bin.tar.gz'")
|
|
},
|
|
},
|
|
{
|
|
name: "Oneoff install custom CDN",
|
|
opts: InstallScriptOptions{
|
|
AutoupdateStyle: UpdaterBinaryAutoupdate,
|
|
TeleportVersion: testVersion,
|
|
ProxyAddr: testProxyAddr,
|
|
TeleportFlavor: types.PackageNameOSS,
|
|
CDNBaseURL: "https://cdn.example.com",
|
|
},
|
|
assertFn: func(t *testing.T, script string) {
|
|
require.Contains(t, script, "entrypoint='teleport-update'")
|
|
require.Contains(t, script, fmt.Sprintf("teleportVersion='v%s'", testVersion))
|
|
require.Contains(t, script, fmt.Sprintf("teleportFlavor='%s'", types.PackageNameOSS))
|
|
require.Contains(t, script, "cdnBaseURL='https://cdn.example.com'")
|
|
require.Contains(t, script, fmt.Sprintf("entrypointArgs='enable --proxy %s --base-url %s'", testProxyAddr, "https://cdn.example.com"))
|
|
require.Contains(t, script, "packageSuffix='bin.tar.gz'")
|
|
},
|
|
},
|
|
{
|
|
name: "Oneoff install default CDN",
|
|
opts: InstallScriptOptions{
|
|
AutoupdateStyle: UpdaterBinaryAutoupdate,
|
|
TeleportVersion: testVersion,
|
|
ProxyAddr: testProxyAddr,
|
|
TeleportFlavor: types.PackageNameOSS,
|
|
CDNBaseURL: teleportassets.TeleportReleaseCDN,
|
|
},
|
|
assertFn: func(t *testing.T, script string) {
|
|
require.Contains(t, script, "entrypoint='teleport-update'")
|
|
require.Contains(t, script, fmt.Sprintf("teleportVersion='v%s'", testVersion))
|
|
require.Contains(t, script, fmt.Sprintf("teleportFlavor='%s'", types.PackageNameOSS))
|
|
require.Contains(t, script, fmt.Sprintf("cdnBaseURL='%s'", teleportassets.TeleportReleaseCDN))
|
|
require.Contains(t, script, fmt.Sprintf("entrypointArgs='enable --proxy %s'", testProxyAddr))
|
|
require.Contains(t, script, "packageSuffix='bin.tar.gz'")
|
|
},
|
|
},
|
|
{
|
|
name: "Oneoff enterprise install",
|
|
opts: InstallScriptOptions{
|
|
AutoupdateStyle: UpdaterBinaryAutoupdate,
|
|
TeleportVersion: testVersion,
|
|
ProxyAddr: testProxyAddr,
|
|
TeleportFlavor: types.PackageNameEnt,
|
|
},
|
|
assertFn: func(t *testing.T, script string) {
|
|
require.Contains(t, script, "entrypoint='teleport-update'")
|
|
require.Contains(t, script, fmt.Sprintf("teleportVersion='v%s'", testVersion))
|
|
require.Contains(t, script, fmt.Sprintf("teleportFlavor='%s'", types.PackageNameEnt))
|
|
require.Contains(t, script, fmt.Sprintf("cdnBaseURL='%s'", teleportassets.CDNBaseURL()))
|
|
require.Contains(t, script, fmt.Sprintf("entrypointArgs='enable --proxy %s'", testProxyAddr))
|
|
require.Contains(t, script, "packageSuffix='bin.tar.gz'")
|
|
},
|
|
},
|
|
{
|
|
name: "Oneoff enterprise FIPS install",
|
|
opts: InstallScriptOptions{
|
|
AutoupdateStyle: UpdaterBinaryAutoupdate,
|
|
TeleportVersion: testVersion,
|
|
ProxyAddr: testProxyAddr,
|
|
TeleportFlavor: types.PackageNameEnt,
|
|
FIPS: true,
|
|
},
|
|
assertFn: func(t *testing.T, script string) {
|
|
require.Contains(t, script, "entrypoint='teleport-update'")
|
|
require.Contains(t, script, fmt.Sprintf("teleportVersion='v%s'", testVersion))
|
|
require.Contains(t, script, fmt.Sprintf("teleportFlavor='%s'", types.PackageNameEnt))
|
|
require.Contains(t, script, fmt.Sprintf("cdnBaseURL='%s'", teleportassets.CDNBaseURL()))
|
|
require.Contains(t, script, fmt.Sprintf("entrypointArgs='enable --proxy %s'", testProxyAddr))
|
|
require.Contains(t, script, "packageSuffix='fips-bin.tar.gz'")
|
|
},
|
|
},
|
|
}
|
|
for _, test := range tests {
|
|
t.Run(test.name, func(t *testing.T) {
|
|
// Sanity check, test input should be legal.
|
|
require.NoError(t, test.opts.Check())
|
|
|
|
// Test execution.
|
|
result, err := GetInstallScript(ctx, test.opts)
|
|
require.NoError(t, err)
|
|
test.assertFn(t, result)
|
|
})
|
|
}
|
|
}
|