feat(coderd): add provisioner build version and api_version on serve (#11369)

* assert provisioner daemon version and api_version in unit tests
* add build info in HTTP header, extract codersdk.BuildVersionHeader
* add api_version to codersdk.ProvisionerDaemon
* testutil.MustString -> testutil.MustRandString
This commit is contained in:
Cian Johnston
2024-01-03 09:01:57 +00:00
committed by GitHub
parent 9031b498ea
commit 1ef96022b0
22 changed files with 97 additions and 34 deletions
@@ -7,6 +7,7 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/coder/coder/v2/buildinfo"
"github.com/coder/coder/v2/cli/clitest"
"github.com/coder/coder/v2/coderd/coderdtest"
"github.com/coder/coder/v2/coderd/rbac"
@@ -49,6 +50,8 @@ func TestProvisionerDaemon_PSK(t *testing.T) {
}, testutil.WaitShort, testutil.IntervalSlow)
require.Equal(t, "matt-daemon", daemons[0].Name)
require.Equal(t, provisionersdk.ScopeOrganization, daemons[0].Tags[provisionersdk.TagScope])
require.Equal(t, buildinfo.Version(), daemons[0].Version)
require.Equal(t, provisionersdk.APIVersionCurrent, daemons[0].APIVersion)
}
func TestProvisionerDaemon_SessionToken(t *testing.T) {
@@ -84,6 +87,8 @@ func TestProvisionerDaemon_SessionToken(t *testing.T) {
assert.Equal(t, "my-daemon", daemons[0].Name)
assert.Equal(t, provisionersdk.ScopeUser, daemons[0].Tags[provisionersdk.TagScope])
assert.Equal(t, anotherUser.ID.String(), daemons[0].Tags[provisionersdk.TagOwner])
assert.Equal(t, buildinfo.Version(), daemons[0].Version)
assert.Equal(t, provisionersdk.APIVersionCurrent, daemons[0].APIVersion)
})
t.Run("ScopeAnotherUser", func(t *testing.T) {
@@ -118,6 +123,8 @@ func TestProvisionerDaemon_SessionToken(t *testing.T) {
assert.Equal(t, provisionersdk.ScopeUser, daemons[0].Tags[provisionersdk.TagScope])
// This should get clobbered to the user who started the daemon.
assert.Equal(t, anotherUser.ID.String(), daemons[0].Tags[provisionersdk.TagOwner])
assert.Equal(t, buildinfo.Version(), daemons[0].Version)
assert.Equal(t, provisionersdk.APIVersionCurrent, daemons[0].APIVersion)
})
t.Run("ScopeOrg", func(t *testing.T) {
@@ -150,5 +157,7 @@ func TestProvisionerDaemon_SessionToken(t *testing.T) {
}, testutil.WaitShort, testutil.IntervalSlow)
assert.Equal(t, "org-daemon", daemons[0].Name)
assert.Equal(t, provisionersdk.ScopeOrganization, daemons[0].Tags[provisionersdk.TagScope])
assert.Equal(t, buildinfo.Version(), daemons[0].Version)
assert.Equal(t, provisionersdk.APIVersionCurrent, daemons[0].APIVersion)
})
}
+5 -12
View File
@@ -15,9 +15,9 @@ import (
"github.com/coder/coder/v2/coderd/database/dbgen"
"github.com/coder/coder/v2/coderd/database/dbtestutil"
"github.com/coder/coder/v2/coderd/database/postgres"
"github.com/coder/coder/v2/cryptorand"
"github.com/coder/coder/v2/enterprise/dbcrypt"
"github.com/coder/coder/v2/pty/ptytest"
"github.com/coder/coder/v2/testutil"
)
// TestServerDBCrypt tests end-to-end encryption, decryption, and deletion
@@ -50,7 +50,7 @@ func TestServerDBCrypt(t *testing.T) {
users := genData(t, db)
// Setup an initial cipher A
keyA := mustString(t, 32)
keyA := testutil.MustRandString(t, 32)
cipherA, err := dbcrypt.NewCiphers([]byte(keyA))
require.NoError(t, err)
@@ -87,7 +87,7 @@ func TestServerDBCrypt(t *testing.T) {
}
// Re-encrypt all existing data with a new cipher.
keyB := mustString(t, 32)
keyB := testutil.MustRandString(t, 32)
cipherBA, err := dbcrypt.NewCiphers([]byte(keyB), []byte(keyA))
require.NoError(t, err)
@@ -160,7 +160,7 @@ func TestServerDBCrypt(t *testing.T) {
}
// Re-encrypt all existing data with a new cipher.
keyC := mustString(t, 32)
keyC := testutil.MustRandString(t, 32)
cipherC, err := dbcrypt.NewCiphers([]byte(keyC))
require.NoError(t, err)
@@ -222,7 +222,7 @@ func genData(t *testing.T, db database.Store) []database.User {
for _, status := range database.AllUserStatusValues() {
for _, loginType := range database.AllLoginTypeValues() {
for _, deleted := range []bool{false, true} {
randName := mustString(t, 32)
randName := testutil.MustRandString(t, 32)
usr := dbgen.User(t, db, database.User{
Username: randName,
Email: randName + "@notcoder.com",
@@ -252,13 +252,6 @@ func genData(t *testing.T, db database.Store) []database.User {
return users
}
func mustString(t *testing.T, n int) string {
t.Helper()
s, err := cryptorand.String(n)
require.NoError(t, err)
return s
}
func requireEncryptedEquals(t *testing.T, c dbcrypt.Cipher, expected, actual string) {
t.Helper()
var decodedVal []byte