Files
teleport/lib/services/databaseservice_test.go
T
Marco André Dinis 69dc237fe2 DatabaseService resource: client and server CRUD (#19469)
* DatabaseService resource: client and server CRUD

In the context of Teleport Discover, we must be able to known if there's
any DatabaseService available to proxy a given Database resource.
If there's none available, we will offer a script for the user to run
and install a DatabaseService which proxies the desired Database
resource.

By DatabaseService, we mean the process that Teleport binary manages
when the `teleport.yaml` config has the following section:
```yaml
db_service:
  enabled: "yes"
```

To accomplish this we are creating a new resource: DatabaseService.
The UI will fetch all DatabaseServices and check if there's any
ResourceMatcher that matches the DatabaseLabels.

A previous PR created the DatabaseService resource.

This PR creates all the necessary CRUD operations:
- Add Service to manage DatabaseServices resources in the backend.
- Add GetAll, Upsert, Delete and DeleteAll operations to Client.
- Add DatabaseService support to ListResources.
- Add WebAPI endpoint to list DatabaseServices using ListResources.

The next PR will add the heartbeat mechanism to the DatabaseService
process.
2022-12-21 14:34:36 +01:00

81 lines
2.1 KiB
Go

/*
Copyright 2022 Gravitational, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package services
import (
"testing"
"github.com/stretchr/testify/require"
"github.com/gravitational/teleport/api/types"
"github.com/gravitational/teleport/lib/utils"
)
// TestDatabaseServiceUnmarshal verifies that DatabaseService resource can be unmarshaled.
func TestDatabaseServiceUnmarshal(t *testing.T) {
expected, err := types.NewDatabaseServiceV1(types.Metadata{
Name: "test-database-service",
}, types.DatabaseServiceSpecV1{
ResourceMatchers: []*types.DatabaseResourceMatcher{
{
Labels: &types.Labels{
"env": []string{"prod", "stg"},
},
},
},
})
require.NoError(t, err)
data, err := utils.ToJSON([]byte(dbServiceYAML))
require.NoError(t, err)
actual, err := UnmarshalDatabaseService(data)
require.NoError(t, err)
require.Equal(t, expected, actual)
}
// TestDatabaseServicenMarshal verifies a marshaled kubernetes resource resource can be unmarshaled back.
func TestDatabaseServiceMarshal(t *testing.T) {
expected, err := types.NewDatabaseServiceV1(types.Metadata{
Name: "test-database-service",
}, types.DatabaseServiceSpecV1{
ResourceMatchers: []*types.DatabaseResourceMatcher{
{
Labels: &types.Labels{
"env": []string{"prod"},
},
},
},
})
require.NoError(t, err)
data, err := MarshalDatabaseService(expected)
require.NoError(t, err)
actual, err := UnmarshalDatabaseService(data)
require.NoError(t, err)
require.Equal(t, expected, actual)
}
var dbServiceYAML = `---
kind: database_service
version: v1
metadata:
name: test-database-service
spec:
resources:
- labels:
env: [prod, stg]
`