92 lines
3.3 KiB
Go
92 lines
3.3 KiB
Go
package kiro
|
|
|
|
import (
|
|
"crypto/sha256"
|
|
"encoding/hex"
|
|
"fmt"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestBuildLoginHeadersStable(t *testing.T) {
|
|
headers1 := BuildLoginHeaders("", "")
|
|
headers2 := BuildLoginHeaders("", "")
|
|
|
|
require.Equal(t, headers1["User-Agent"], headers2["User-Agent"])
|
|
require.Equal(t, "application/json, text/plain, */*", headers1["Accept"])
|
|
require.Equal(t, "application/json", headers1["Content-Type"])
|
|
require.True(t, strings.HasPrefix(headers1["User-Agent"], "KiroIDE-"))
|
|
require.Contains(t, headers1["User-Agent"], "KiroIDE-")
|
|
}
|
|
|
|
func TestBuildLoginHeadersUsesProvidedMachineID(t *testing.T) {
|
|
machineIDA := BuildMachineID("refresh-a", "", "")
|
|
machineIDB := BuildMachineID("refresh-b", "", "")
|
|
headers1 := BuildLoginHeaders("account-a", machineIDA)
|
|
headers2 := BuildLoginHeaders("account-a", machineIDA)
|
|
headers3 := BuildLoginHeaders("account-a", machineIDB)
|
|
|
|
require.Equal(t, headers1["User-Agent"], headers2["User-Agent"])
|
|
require.NotEqual(t, headers1["User-Agent"], headers3["User-Agent"])
|
|
require.Contains(t, headers1["User-Agent"], "KiroIDE-0.11.")
|
|
require.Contains(t, headers1["User-Agent"], machineIDA)
|
|
}
|
|
|
|
func TestBuildOIDCHeadersUsesProvidedAccountKey(t *testing.T) {
|
|
machineID := BuildMachineID("", "", "oidc-machine")
|
|
headers1 := BuildOIDCHeaders("account-a", machineID)
|
|
headers2 := BuildOIDCHeaders("account-a", machineID)
|
|
headers3 := BuildOIDCHeaders("account-b", machineID)
|
|
|
|
require.Equal(t, headers1["User-Agent"], headers2["User-Agent"])
|
|
require.NotEqual(t, headers1["User-Agent"], headers3["User-Agent"])
|
|
require.Contains(t, headers1["User-Agent"], "api/sso-oidc#")
|
|
}
|
|
|
|
func TestBuildAccountKeyFallsBackToAccountIDBeforeRandom(t *testing.T) {
|
|
key1 := BuildAccountKey("", "", "", "", 42)
|
|
key2 := BuildAccountKey("", "", "", "", 42)
|
|
key3 := BuildAccountKey("", "", "", "", 43)
|
|
|
|
require.Equal(t, key1, key2)
|
|
require.Equal(t, shortSHA(fmt.Sprintf("account:%d", 42)), key1)
|
|
require.NotEqual(t, key1, key3)
|
|
}
|
|
|
|
func TestBuildMachineID(t *testing.T) {
|
|
require.Equal(t, expectedKiroMachineID("KotlinNativeAPI/token"), BuildMachineID("token", "", ""))
|
|
require.Equal(t, expectedKiroMachineID("KiroAPIKey/key"), BuildMachineID("", "key", ""))
|
|
require.Equal(t, expectedKiroMachineID("KotlinNativeAPI/token"), BuildMachineID("token", "key", "fallback"))
|
|
|
|
fallback1 := BuildMachineID("", "", "account:1")
|
|
fallback2 := BuildMachineID("", "", "account:1")
|
|
fallback3 := BuildMachineID("", "", "account:2")
|
|
require.Equal(t, expectedKiroMachineID("KiroFallback/account:1"), fallback1)
|
|
require.Equal(t, fallback1, fallback2)
|
|
require.NotEqual(t, fallback1, fallback3)
|
|
require.Len(t, fallback1, 64)
|
|
}
|
|
|
|
func TestNormalizeMachineID(t *testing.T) {
|
|
hex64 := strings.Repeat("A", 64)
|
|
normalized, ok := NormalizeMachineID(hex64)
|
|
require.True(t, ok)
|
|
require.Equal(t, strings.ToLower(hex64), normalized)
|
|
|
|
normalized, ok = NormalizeMachineID("2582956e-cc88-4669-b546-07adbffcb894")
|
|
require.True(t, ok)
|
|
require.Equal(t, "2582956ecc884669b54607adbffcb8942582956ecc884669b54607adbffcb894", normalized)
|
|
|
|
_, ok = NormalizeMachineID("not-a-machine-id")
|
|
require.False(t, ok)
|
|
_, ok = NormalizeMachineID(strings.Repeat("g", 64))
|
|
require.False(t, ok)
|
|
}
|
|
|
|
func expectedKiroMachineID(seed string) string {
|
|
sum := sha256.Sum256([]byte(seed))
|
|
return hex.EncodeToString(sum[:])
|
|
}
|