remote Metadata.ID and Lease.ID fields (#41732)

This commit is contained in:
Forrest
2024-05-23 15:08:46 +00:00
committed by GitHub
parent 10b63e483a
commit 171758f6e8
210 changed files with 2173 additions and 3284 deletions
@@ -53,11 +53,6 @@ type Metadata struct {
// expires is a global expiry time header can be set on any resource in the
// system.
Expires *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=expires,proto3" json:"expires,omitempty"`
// ID is a record ID
// Deprecated: Use revision instead.
//
// Deprecated: Marked as deprecated in teleport/header/v1/metadata.proto.
Id int64 `protobuf:"varint,7,opt,name=id,proto3" json:"id,omitempty"`
// revision is an opaque identifier which tracks the versions of a resource
// over time. Clients should ignore and not alter its value but must return
// the revision in any updates of a resource.
@@ -131,14 +126,6 @@ func (x *Metadata) GetExpires() *timestamppb.Timestamp {
return nil
}
// Deprecated: Marked as deprecated in teleport/header/v1/metadata.proto.
func (x *Metadata) GetId() int64 {
if x != nil {
return x.Id
}
return 0
}
func (x *Metadata) GetRevision() string {
if x != nil {
return x.Revision
@@ -154,7 +141,7 @@ var file_teleport_header_v1_metadata_proto_rawDesc = []byte{
0x6f, 0x74, 0x6f, 0x12, 0x12, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x68, 0x65,
0x61, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc1, 0x02, 0x0a, 0x08, 0x4d, 0x65, 0x74,
0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb7, 0x02, 0x0a, 0x08, 0x4d, 0x65, 0x74,
0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d,
0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61,
@@ -168,19 +155,18 @@ var file_teleport_header_v1_metadata_proto_rawDesc = []byte{
0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67,
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54,
0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65,
0x73, 0x12, 0x12, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x42, 0x02, 0x18,
0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f,
0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f,
0x6e, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b,
0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x50, 0x5a, 0x4e,
0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x61, 0x76, 0x69,
0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72,
0x74, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f,
0x67, 0x6f, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x68, 0x65, 0x61, 0x64,
0x65, 0x72, 0x2f, 0x76, 0x31, 0x3b, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x76, 0x31, 0x62, 0x06,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x73, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20,
0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x39, 0x0a,
0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14,
0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76,
0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x52, 0x02,
0x69, 0x64, 0x42, 0x50, 0x5a, 0x4e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d,
0x2f, 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x74,
0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x2f,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72,
0x74, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x3b, 0x68, 0x65, 0x61, 0x64,
0x65, 0x72, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
+2 -3
View File
@@ -22,6 +22,8 @@ option go_package = "github.com/gravitational/teleport/api/gen/proto/go/teleport
// Metadata is resource metadata.
message Metadata {
reserved 7; // id
reserved "id";
// name is an object name.
string name = 1;
// namespace is object namespace. The field should be called "namespace"
@@ -34,9 +36,6 @@ message Metadata {
// expires is a global expiry time header can be set on any resource in the
// system.
google.protobuf.Timestamp expires = 6;
// ID is a record ID
// Deprecated: Use revision instead.
int64 id = 7 [deprecated = true];
// revision is an opaque identifier which tracks the versions of a resource
// over time. Clients should ignore and not alter its value but must return
// the revision in any updates of a resource.
+6 -8
View File
@@ -27,12 +27,13 @@ option (gogoproto.marshaler_all) = true;
option (gogoproto.unmarshaler_all) = true;
message KeepAlive {
reserved 3; // LeaseID
reserved "LeaseID";
// Name of the resource to keep alive.
string Name = 1 [(gogoproto.jsontag) = "server_name"];
// Namespace is the namespace of the resource.
string Namespace = 2 [(gogoproto.jsontag) = "namespace"];
// LeaseID is ID of the lease.
int64 LeaseID = 3 [(gogoproto.jsontag) = "lease_id"];
// Expires is set to update expiry time of the resource.
google.protobuf.Timestamp Expires = 4 [
(gogoproto.stdtime) = true,
@@ -69,6 +70,9 @@ message KeepAlive {
// Metadata is resource metadata
message Metadata {
reserved 7; // ID
reserved "ID";
// Name is an object name
string Name = 1 [(gogoproto.jsontag) = "name"];
// Namespace is object namespace. The field should be called "namespace"
@@ -85,12 +89,6 @@ message Metadata {
(gogoproto.nullable) = true,
(gogoproto.jsontag) = "expires,omitempty"
];
// ID is a record ID.
// Deprecated: Use revision instead.
int64 ID = 7 [
deprecated = true,
(gogoproto.jsontag) = "id,omitempty"
];
// Revision is an opaque identifier which tracks the versions of a resource
// over time. Clients should ignore and not alter its value but must return
// the revision in any updates of a resource.
-10
View File
@@ -458,16 +458,6 @@ func (r *AccessRequestV3) GetMetadata() Metadata {
return r.Metadata
}
// GetResourceID gets ResourceID
func (r *AccessRequestV3) GetResourceID() int64 {
return r.Metadata.GetID()
}
// SetResourceID sets ResourceID
func (r *AccessRequestV3) SetResourceID(id int64) {
r.Metadata.SetID(id)
}
// GetRevision returns the revision
func (r *AccessRequestV3) GetRevision() string {
return r.Metadata.GetRevision()
-10
View File
@@ -116,16 +116,6 @@ func (a *AppV3) SetSubKind(sk string) {
a.SubKind = sk
}
// GetResourceID returns the app resource ID.
func (a *AppV3) GetResourceID() int64 {
return a.Metadata.ID
}
// SetResourceID sets the app resource ID.
func (a *AppV3) SetResourceID(id int64) {
a.Metadata.ID = id
}
// GetRevision returns the revision
func (a *AppV3) GetRevision() string {
return a.Metadata.GetRevision()
-4
View File
@@ -303,7 +303,6 @@ func TestNewAppV3(t *testing.T) {
meta: Metadata{
Name: "myapp",
Description: "my fancy app",
ID: 123,
},
spec: AppSpecV3{URI: "example.com"},
want: &AppV3{
@@ -313,7 +312,6 @@ func TestNewAppV3(t *testing.T) {
Name: "myapp",
Namespace: "default",
Description: "my fancy app",
ID: 123,
}, Spec: AppSpecV3{URI: "example.com"},
},
wantErr: require.NoError,
@@ -323,7 +321,6 @@ func TestNewAppV3(t *testing.T) {
meta: Metadata{
Name: "myapp",
Description: "my fancy app",
ID: 123,
},
spec: AppSpecV3{URI: "example.com"},
want: &AppV3{
@@ -333,7 +330,6 @@ func TestNewAppV3(t *testing.T) {
Name: "myapp",
Namespace: "default",
Description: "my fancy app",
ID: 123,
},
Spec: AppSpecV3{URI: "example.com"},
},
-10
View File
@@ -136,16 +136,6 @@ func (s *AppServerV3) SetSubKind(sk string) {
s.SubKind = sk
}
// GetResourceID returns the resource ID.
func (s *AppServerV3) GetResourceID() int64 {
return s.Metadata.ID
}
// SetResourceID sets the resource ID.
func (s *AppServerV3) SetResourceID(id int64) {
s.Metadata.ID = id
}
// GetRevision returns the revision
func (s *AppServerV3) GetRevision() string {
return s.Metadata.GetRevision()
-20
View File
@@ -226,26 +226,6 @@ func (a *AppServerOrSAMLIdPServiceProviderV1) SetName(name string) {
a.GetSAMLIdPServiceProvider().SetName(name)
}
func (a *AppServerOrSAMLIdPServiceProviderV1) GetResourceID() int64 {
if a.IsAppServer() {
appServer := a.GetAppServer()
return appServer.Metadata.ID
} else {
sp := a.GetSAMLIdPServiceProvider()
return sp.Metadata.ID
}
}
func (a *AppServerOrSAMLIdPServiceProviderV1) SetResourceID(id int64) {
if a.IsAppServer() {
appServer := a.GetAppServer()
appServer.Metadata.ID = id
} else {
sp := a.GetSAMLIdPServiceProvider()
sp.Metadata.ID = id
}
}
// GetRevision returns the revision
func (a *AppServerOrSAMLIdPServiceProviderV1) GetRevision() string {
if a.IsAppServer() {
-10
View File
@@ -125,16 +125,6 @@ func (c *ClusterAuditConfigV2) GetMetadata() Metadata {
return c.Metadata
}
// GetResourceID returns resource ID.
func (c *ClusterAuditConfigV2) GetResourceID() int64 {
return c.Metadata.ID
}
// SetResourceID sets resource ID.
func (c *ClusterAuditConfigV2) SetResourceID(id int64) {
c.Metadata.ID = id
}
// GetRevision returns the revision
func (c *ClusterAuditConfigV2) GetRevision() string {
return c.Metadata.GetRevision()
-12
View File
@@ -240,16 +240,6 @@ func (c *AuthPreferenceV2) GetMetadata() Metadata {
return c.Metadata
}
// GetResourceID returns resource ID.
func (c *AuthPreferenceV2) GetResourceID() int64 {
return c.Metadata.ID
}
// SetResourceID sets resource ID.
func (c *AuthPreferenceV2) SetResourceID(id int64) {
c.Metadata.ID = id
}
// GetRevision returns the revision
func (c *AuthPreferenceV2) GetRevision() string {
return c.Metadata.GetRevision()
@@ -911,8 +901,6 @@ func (d *MFADevice) GetVersion() string { return d.Version }
func (d *MFADevice) GetMetadata() Metadata { return d.Metadata }
func (d *MFADevice) GetName() string { return d.Metadata.GetName() }
func (d *MFADevice) SetName(n string) { d.Metadata.SetName(n) }
func (d *MFADevice) GetResourceID() int64 { return d.Metadata.GetID() }
func (d *MFADevice) SetResourceID(id int64) { d.Metadata.SetID(id) }
func (d *MFADevice) GetRevision() string { return d.Metadata.GetRevision() }
func (d *MFADevice) SetRevision(rev string) { d.Metadata.SetRevision(rev) }
func (d *MFADevice) Expiry() time.Time { return d.Metadata.Expiry() }
-10
View File
@@ -144,16 +144,6 @@ func (ca *CertAuthorityV2) Expiry() time.Time {
return ca.Metadata.Expiry()
}
// GetResourceID returns resource ID
func (ca *CertAuthorityV2) GetResourceID() int64 {
return ca.Metadata.ID
}
// SetResourceID sets resource ID
func (ca *CertAuthorityV2) SetResourceID(id int64) {
ca.Metadata.ID = id
}
// GetRevision returns the revision
func (ca *CertAuthorityV2) GetRevision() string {
return ca.Metadata.GetRevision()
-10
View File
@@ -74,16 +74,6 @@ func (c *ClusterNameV2) SetSubKind(sk string) {
c.SubKind = sk
}
// GetResourceID returns resource ID
func (c *ClusterNameV2) GetResourceID() int64 {
return c.Metadata.ID
}
// SetResourceID sets resource ID
func (c *ClusterNameV2) SetResourceID(id int64) {
c.Metadata.ID = id
}
// GetRevision returns the revision
func (c *ClusterNameV2) GetRevision() string {
return c.Metadata.GetRevision()
-10
View File
@@ -179,16 +179,6 @@ func (d *DatabaseV3) SetSubKind(sk string) {
d.SubKind = sk
}
// GetResourceID returns the database resource ID.
func (d *DatabaseV3) GetResourceID() int64 {
return d.Metadata.ID
}
// SetResourceID sets the database resource ID.
func (d *DatabaseV3) SetResourceID(id int64) {
d.Metadata.ID = id
}
// GetRevision returns the revision
func (d *DatabaseV3) GetRevision() string {
return d.Metadata.GetRevision()
-10
View File
@@ -106,16 +106,6 @@ func (s *DatabaseServerV3) SetSubKind(sk string) {
s.SubKind = sk
}
// GetResourceID returns the resource ID.
func (s *DatabaseServerV3) GetResourceID() int64 {
return s.Metadata.ID
}
// SetResourceID sets the resource ID.
func (s *DatabaseServerV3) SetResourceID(id int64) {
s.Metadata.ID = id
}
// GetRevision returns the revision
func (s *DatabaseServerV3) GetRevision() string {
return s.Metadata.GetRevision()
-10
View File
@@ -109,16 +109,6 @@ func (c *GithubConnectorV3) SetSubKind(s string) {
c.SubKind = s
}
// GetResourceID returns resource ID
func (c *GithubConnectorV3) GetResourceID() int64 {
return c.Metadata.ID
}
// SetResourceID sets resource ID
func (c *GithubConnectorV3) SetResourceID(id int64) {
c.Metadata.ID = id
}
// GetRevision returns the revision
func (c *GithubConnectorV3) GetRevision() string {
return c.Metadata.GetRevision()
@@ -25,7 +25,6 @@ import (
// TODO: Remove this once we get rid of the old Metadata object.
func FromHeaderMetadata(metadata header.Metadata) types.Metadata {
return types.Metadata{
ID: metadata.ID,
Name: metadata.Name,
Expires: &metadata.Expires,
Description: metadata.Description,
@@ -31,7 +31,6 @@ func TestFromHeaderMetadata(t *testing.T) {
expires := time.Now()
expectedHeader := types.Metadata{
ID: 12345,
Name: "name",
Expires: &expires,
Description: "description",
@@ -44,7 +43,6 @@ func TestFromHeaderMetadata(t *testing.T) {
Description: "description",
Labels: map[string]string{"label": "value"},
Expires: expires,
ID: 12345,
Revision: "revision",
})
-2
View File
@@ -59,7 +59,6 @@ func FromMetadataProto(msg *headerv1.Metadata) header.Metadata {
Description: msg.Description,
Labels: msg.Labels,
Expires: expires,
ID: msg.Id, //nolint:staticcheck // Keep propagating ID until it's entirely replaced by revision.
Revision: msg.Revision,
}
}
@@ -77,7 +76,6 @@ func ToMetadataProto(metadata header.Metadata) *headerv1.Metadata {
Description: metadata.Description,
Labels: metadata.Labels,
Expires: expires,
Id: metadata.ID, //nolint:staticcheck // Keep propagating ID until it's entirely replaced by revision.
Revision: metadata.Revision,
}
}
@@ -37,7 +37,6 @@ func TestResourceHeaderRoundtrip(t *testing.T) {
Description: "description",
Labels: map[string]string{"label": "value"},
Expires: time.Now(),
ID: 12345,
},
}
@@ -52,7 +51,6 @@ func TestMetadataRoundtrip(t *testing.T) {
Description: "description",
Labels: map[string]string{"label": "value"},
Expires: time.Now(),
ID: 12345,
}
converted := FromMetadataProto(ToMetadataProto(metadata))
-25
View File
@@ -60,16 +60,6 @@ func (h *ResourceHeader) SetVersion(version string) {
h.Version = version
}
// GetResourceID returns the resource ID.
func (h *ResourceHeader) GetResourceID() int64 {
return h.Metadata.GetID()
}
// SetResourceID sets the resource ID.
func (h *ResourceHeader) SetResourceID(id int64) {
h.Metadata.SetID(id)
}
// GetRevision returns the revision.
func (h *ResourceHeader) GetRevision() string {
return h.Metadata.GetRevision()
@@ -183,27 +173,12 @@ type Metadata struct {
Labels map[string]string `json:"labels,omitempty" yaml:"labels,omitempty"`
// Expires is a global expiry time header can be set on any resource in the system.
Expires time.Time `json:"expires" yaml:"expires"`
// ID is a record ID
// Deprecated: Use revision instead.
ID int64 `json:"id,omitempty" yaml:"id,omitempty"`
// Revision is an opaque identifier which tracks the versions of a resource
// over time. Clients should ignore and not alter its value but must return
// the revision in any updates of a resource.
Revision string `json:"revision,omitempty" yaml:"revision,omitempty"`
}
// GetID returns the resource ID.
// Deprecated: Use GetRevision instead
func (m *Metadata) GetID() int64 {
return m.ID
}
// SetID sets the resource ID.
// Deprecated: Use SetRevision instead
func (m *Metadata) SetID(id int64) {
m.ID = id
}
// GetRevision returns the revision
func (m *Metadata) GetRevision() string {
return m.Revision
-10
View File
@@ -97,16 +97,6 @@ func (c *InstallerV1) GetMetadata() Metadata {
return c.Metadata
}
// GetResourceID returns resource ID.
func (c *InstallerV1) GetResourceID() int64 {
return c.Metadata.ID
}
// SetResourceID sets resource ID.
func (c *InstallerV1) SetResourceID(id int64) {
c.Metadata.ID = id
}
// GetRevision returns the revision
func (c *InstallerV1) GetRevision() string {
return c.Metadata.GetRevision()
-20
View File
@@ -161,16 +161,6 @@ func (k *KubernetesClusterV3) SetSubKind(sk string) {
k.SubKind = sk
}
// GetResourceID returns the app resource ID.
func (k *KubernetesClusterV3) GetResourceID() int64 {
return k.Metadata.ID
}
// SetResourceID sets the resource ID.
func (k *KubernetesClusterV3) SetResourceID(id int64) {
k.Metadata.ID = id
}
// GetRevision returns the revision
func (k *KubernetesClusterV3) GetRevision() string {
return k.Metadata.GetRevision()
@@ -629,16 +619,6 @@ func (k *KubernetesResourceV1) SetExpiry(expire time.Time) {
k.Metadata.SetExpiry(expire)
}
// GetResourceID returns resource ID.
func (k *KubernetesResourceV1) GetResourceID() int64 {
return k.Metadata.ID
}
// SetResourceID sets resource ID.
func (k *KubernetesResourceV1) SetResourceID(id int64) {
k.Metadata.ID = id
}
// GetRevision returns the revision
func (k *KubernetesResourceV1) GetRevision() string {
return k.Metadata.GetRevision()
-10
View File
@@ -118,16 +118,6 @@ func (s *KubernetesServerV3) SetSubKind(sk string) {
s.SubKind = sk
}
// GetResourceID returns the resource ID.
func (s *KubernetesServerV3) GetResourceID() int64 {
return s.Metadata.ID
}
// SetResourceID sets the resource ID.
func (s *KubernetesServerV3) SetResourceID(id int64) {
s.Metadata.ID = id
}
// GetRevision returns the revision
func (s *KubernetesServerV3) GetRevision() string {
return s.Metadata.GetRevision()
-10
View File
@@ -223,16 +223,6 @@ func (c *LicenseV3) GetKind() string {
return c.Kind
}
// GetResourceID returns resource ID
func (c *LicenseV3) GetResourceID() int64 {
return c.Metadata.ID
}
// SetResourceID sets resource ID
func (c *LicenseV3) SetResourceID(id int64) {
c.Metadata.ID = id
}
// GetRevision returns the revision
func (c *LicenseV3) GetRevision() string {
return c.Metadata.GetRevision()
-10
View File
@@ -104,16 +104,6 @@ func (c *LockV2) GetMetadata() Metadata {
return c.Metadata
}
// GetResourceID returns resource ID.
func (c *LockV2) GetResourceID() int64 {
return c.Metadata.ID
}
// SetResourceID sets resource ID.
func (c *LockV2) SetResourceID(id int64) {
c.Metadata.ID = id
}
// GetRevision returns the revision
func (c *LockV2) GetRevision() string {
return c.Metadata.GetRevision()
-10
View File
@@ -84,16 +84,6 @@ func (n *Namespace) SetSubKind(sk string) {
n.SubKind = sk
}
// GetResourceID returns resource ID
func (n *Namespace) GetResourceID() int64 {
return n.Metadata.ID
}
// SetResourceID sets resource ID
func (n *Namespace) SetResourceID(id int64) {
n.Metadata.ID = id
}
// GetRevision returns the revision
func (n *Namespace) GetRevision() string {
return n.Metadata.GetRevision()
-10
View File
@@ -181,16 +181,6 @@ func (c *ClusterNetworkingConfigV2) GetMetadata() Metadata {
return c.Metadata
}
// GetResourceID returns resource ID.
func (c *ClusterNetworkingConfigV2) GetResourceID() int64 {
return c.Metadata.ID
}
// SetResourceID sets resource ID.
func (c *ClusterNetworkingConfigV2) SetResourceID(id int64) {
c.Metadata.ID = id
}
// GetRevision returns the revision
func (c *ClusterNetworkingConfigV2) GetRevision() string {
return c.Metadata.GetRevision()
-10
View File
@@ -177,16 +177,6 @@ func (o *OIDCConnectorV3) GetKind() string {
return o.Kind
}
// GetResourceID returns resource ID
func (o *OIDCConnectorV3) GetResourceID() int64 {
return o.Metadata.ID
}
// SetResourceID sets resource ID
func (o *OIDCConnectorV3) SetResourceID(id int64) {
o.Metadata.ID = id
}
// GetRevision returns the revision
func (o *OIDCConnectorV3) GetRevision() string {
return o.Metadata.GetRevision()
-10
View File
@@ -365,16 +365,6 @@ func (p *PluginV1) SetSubKind(s string) {
p.SubKind = s
}
// GetResourceID returns resource ID
func (p *PluginV1) GetResourceID() int64 {
return p.Metadata.ID
}
// SetResourceID sets resource ID
func (p *PluginV1) SetResourceID(id int64) {
p.Metadata.ID = id
}
// GetRevision returns the revision
func (p *PluginV1) GetRevision() string {
return p.Metadata.GetRevision()
-10
View File
@@ -101,16 +101,6 @@ func (r *PluginDataV3) GetMetadata() Metadata {
return r.Metadata
}
// GetResourceID returns resource ID
func (r *PluginDataV3) GetResourceID() int64 {
return r.Metadata.GetID()
}
// SetResourceID sets resource ID
func (r *PluginDataV3) SetResourceID(id int64) {
r.Metadata.SetID(id)
}
// GetRevision returns the revision
func (r *PluginDataV3) GetRevision() string {
return r.Metadata.GetRevision()
-10
View File
@@ -414,16 +414,6 @@ func (p *ProvisionTokenV2) SetSubKind(s string) {
p.SubKind = s
}
// GetResourceID returns resource ID
func (p *ProvisionTokenV2) GetResourceID() int64 {
return p.Metadata.ID
}
// SetResourceID sets resource ID
func (p *ProvisionTokenV2) SetResourceID(id int64) {
p.Metadata.ID = id
}
// GetRevision returns the revision
func (p *ProvisionTokenV2) GetRevision() string {
return p.Metadata.GetRevision()
-10
View File
@@ -87,16 +87,6 @@ func (c *RemoteClusterV3) SetSubKind(s string) {
c.SubKind = s
}
// GetResourceID returns resource ID
func (c *RemoteClusterV3) GetResourceID() int64 {
return c.Metadata.ID
}
// SetResourceID sets resource ID
func (c *RemoteClusterV3) SetResourceID(id int64) {
c.Metadata.ID = id
}
// GetRevision returns the revision
func (c *RemoteClusterV3) GetRevision() string {
return c.Metadata.GetRevision()
-46
View File
@@ -60,12 +60,6 @@ type Resource interface {
SetExpiry(time.Time)
// GetMetadata returns object metadata
GetMetadata() Metadata
// GetResourceID returns resource ID
// Deprecated: use GetRevision instead
GetResourceID() int64
// SetResourceID sets resource ID
// Deprecated: use SetRevision instead
SetResourceID(int64)
// GetRevision returns the revision
GetRevision() string
// SetRevision sets the revision
@@ -309,18 +303,6 @@ func (h *ResourceHeader) GetVersion() string {
return h.Version
}
// GetResourceID returns resource ID
// Deprecated: Use GetRevision instead.
func (h *ResourceHeader) GetResourceID() int64 {
return h.Metadata.ID
}
// SetResourceID sets resource ID
// Deprecated: Use SetRevision instead.
func (h *ResourceHeader) SetResourceID(id int64) {
h.Metadata.ID = id
}
// GetRevision returns the revision
func (h *ResourceHeader) GetRevision() string {
return h.Metadata.GetRevision()
@@ -418,16 +400,6 @@ func (h *ResourceHeader) CheckAndSetDefaults() error {
return trace.Wrap(h.Metadata.CheckAndSetDefaults())
}
// GetID returns resource ID
func (m *Metadata) GetID() int64 {
return m.ID
}
// SetID sets resource ID
func (m *Metadata) SetID(id int64) {
m.ID = id
}
// GetRevision returns the revision
func (m *Metadata) GetRevision() string {
return m.Revision
@@ -802,21 +774,3 @@ func GetExpiry(v any) (time.Time, error) {
}
return time.Time{}, trace.BadParameter("unable to determine expiry from resource of type %T", v)
}
// GetResourceID returns the id, if one can be obtained, otherwise returns
// zero.
//
// Works for both [Resource] and [ResourceMetadata] instances.
//
// Deprecated: GetRevision should be used instead.
func GetResourceID(v any) (int64, error) {
switch r := v.(type) {
case Resource:
//nolint:staticcheck // SA1019. Added for backward compatibility.
return r.GetResourceID(), nil
case ResourceMetadata:
//nolint:staticcheck // SA1019. Added for backward compatibility.
return r.GetMetadata().Id, nil
}
return 0, trace.BadParameter("unable to determine resource ID from resource of type %T", v)
}
+1 -14
View File
@@ -103,7 +103,6 @@ func (r *legacyToResource153Adapter) GetMetadata() *headerv1.Metadata {
Description: md.Description,
Labels: md.Labels,
Expires: expires,
Id: md.ID,
Revision: md.Revision,
}
}
@@ -178,9 +177,7 @@ func (r *resource153ToLegacyAdapter) GetMetadata() Metadata {
Description: md.Description,
Labels: md.Labels,
Expires: &expires,
//nolint:staticcheck // SA1019. We need to refer to Id to create the Metadata.
ID: md.Id,
Revision: md.Revision,
Revision: md.Revision,
}
}
@@ -188,11 +185,6 @@ func (r *resource153ToLegacyAdapter) GetName() string {
return r.inner.GetMetadata().Name
}
func (r *resource153ToLegacyAdapter) GetResourceID() int64 {
//nolint:staticcheck // SA1019. We need to refer to Id to provide GetResourceID.
return r.inner.GetMetadata().Id
}
func (r *resource153ToLegacyAdapter) GetRevision() string {
return r.inner.GetMetadata().Revision
}
@@ -213,11 +205,6 @@ func (r *resource153ToLegacyAdapter) SetName(name string) {
r.inner.GetMetadata().Name = name
}
func (r *resource153ToLegacyAdapter) SetResourceID(id int64) {
//nolint:staticcheck // SA1019. We need to refer to Id to provide SetResourceID.
r.inner.GetMetadata().Id = id
}
func (r *resource153ToLegacyAdapter) SetRevision(rev string) {
r.inner.GetMetadata().Revision = rev
}
-19
View File
@@ -113,7 +113,6 @@ func TestResourceMethods(t *testing.T) {
Metadata: types.Metadata{
Name: "llama",
Expires: &expiry,
ID: 1234,
Revision: "alpaca",
Labels: map[string]string{
types.OriginLabel: "earth",
@@ -132,7 +131,6 @@ func TestResourceMethods(t *testing.T) {
Metadata: &headerv1.Metadata{
Name: "Bernard",
Expires: timestamppb.New(expiry),
Id: 4567,
Revision: "tinman",
Labels: map[string]string{
types.OriginLabel: "mars",
@@ -167,23 +165,6 @@ func TestResourceMethods(t *testing.T) {
require.Equal(t, time.Time{}, objExpiry)
})
t.Run("GetResourceID", func(t *testing.T) {
//nolint:staticcheck // SA1019. Deprecated, but still needed.
_, err := types.GetResourceID("invalid type")
require.Error(t, err)
//nolint:staticcheck // SA1019. Deprecated, but still needed.
id, err := types.GetResourceID(user)
require.NoError(t, err)
require.Equal(t, user.GetResourceID(), id)
//nolint:staticcheck // SA1019. Deprecated, but still needed.
id, err = types.GetResourceID(bot)
require.NoError(t, err)
//nolint:staticcheck // SA1019. Deprecated, but still needed.
require.Equal(t, bot.GetMetadata().Id, id)
})
t.Run("GetRevision", func(t *testing.T) {
_, err := types.GetRevision("invalid type")
require.Error(t, err)
-3
View File
@@ -613,7 +613,6 @@ func TestMetadataIsEqual(t *testing.T) {
Description: "description",
Labels: map[string]string{"label1": "value1"},
Expires: &time.Time{},
ID: 1234,
Revision: "aaaa",
}
@@ -657,7 +656,6 @@ func TestMetadataIsEqual(t *testing.T) {
name: "id and revision have no effect",
m1: newMetadata(),
m2: newMetadata(func(m *Metadata) {
m.ID = 7890
m.Revision = "bbbb"
}),
expected: true,
@@ -742,7 +740,6 @@ func TestResourceHeaderIsEqual(t *testing.T) {
Description: "description",
Labels: map[string]string{"label1": "value1"},
Expires: &time.Time{},
ID: 1234,
Revision: "aaaa",
},
}
-8
View File
@@ -98,14 +98,6 @@ func (r *NetworkRestrictionsV4) SetName(n string) {
r.Metadata.SetName(n)
}
func (r *NetworkRestrictionsV4) GetResourceID() int64 {
return r.Metadata.ID
}
func (r *NetworkRestrictionsV4) SetResourceID(id int64) {
r.Metadata.SetID(id)
}
// GetRevision returns the revision
func (r *NetworkRestrictionsV4) GetRevision() string {
return r.Metadata.GetRevision()
-10
View File
@@ -327,16 +327,6 @@ func (r *RoleV6) SetSubKind(s string) {
r.SubKind = s
}
// GetResourceID returns resource ID
func (r *RoleV6) GetResourceID() int64 {
return r.Metadata.ID
}
// SetResourceID sets resource ID
func (r *RoleV6) SetResourceID(id int64) {
r.Metadata.ID = id
}
// GetRevision returns the revision
func (r *RoleV6) GetRevision() string {
return r.Metadata.GetRevision()
-10
View File
@@ -136,16 +136,6 @@ func (o *SAMLConnectorV2) SetSubKind(sk string) {
o.SubKind = sk
}
// GetResourceID returns resource ID
func (o *SAMLConnectorV2) GetResourceID() int64 {
return o.Metadata.ID
}
// SetResourceID sets resource ID
func (o *SAMLConnectorV2) SetResourceID(id int64) {
o.Metadata.ID = id
}
// GetRevision returns the revision
func (o *SAMLConnectorV2) GetRevision() string {
return o.Metadata.GetRevision()
-10
View File
@@ -245,16 +245,6 @@ func (c *SemaphoreV3) GetKind() string {
return c.Kind
}
// GetResourceID returns resource ID
func (c *SemaphoreV3) GetResourceID() int64 {
return c.Metadata.ID
}
// SetResourceID sets resource ID
func (c *SemaphoreV3) SetResourceID(id int64) {
c.Metadata.ID = id
}
// GetRevision returns the revision
func (c *SemaphoreV3) GetRevision() string {
return c.Metadata.GetRevision()
-10
View File
@@ -188,16 +188,6 @@ func (s *ServerV2) SetSubKind(sk string) {
s.SubKind = sk
}
// GetResourceID returns resource ID
func (s *ServerV2) GetResourceID() int64 {
return s.Metadata.ID
}
// SetResourceID sets resource ID
func (s *ServerV2) SetResourceID(id int64) {
s.Metadata.ID = id
}
// GetRevision returns the revision
func (s *ServerV2) GetRevision() string {
return s.Metadata.GetRevision()
-10
View File
@@ -93,16 +93,6 @@ func (s *ServerInfoV1) GetMetadata() Metadata {
return s.Metadata
}
// GetResourceID returns resource ID
func (s *ServerInfoV1) GetResourceID() int64 {
return s.Metadata.ID
}
// SetResourceID sets resource ID
func (s *ServerInfoV1) SetResourceID(id int64) {
s.Metadata.ID = id
}
// GetRevision returns the revision
func (s *ServerInfoV1) GetRevision() string {
return s.Metadata.GetRevision()
-20
View File
@@ -167,16 +167,6 @@ func (ws *WebSessionV2) GetMetadata() Metadata {
return ws.Metadata
}
// GetResourceID gets ResourceID
func (ws *WebSessionV2) GetResourceID() int64 {
return ws.Metadata.GetID()
}
// SetResourceID sets ResourceID
func (ws *WebSessionV2) SetResourceID(id int64) {
ws.Metadata.SetID(id)
}
// GetRevision returns the revision
func (ws *WebSessionV2) GetRevision() string {
return ws.Metadata.GetRevision()
@@ -523,16 +513,6 @@ func (r *WebTokenV3) SetName(name string) {
r.Metadata.Name = name
}
// GetResourceID returns the token resource ID
func (r *WebTokenV3) GetResourceID() int64 {
return r.Metadata.GetID()
}
// SetResourceID sets the token resource ID
func (r *WebTokenV3) SetResourceID(id int64) {
r.Metadata.SetID(id)
}
// GetRevision returns the revision
func (r *WebTokenV3) GetRevision() string {
return r.Metadata.GetRevision()
-10
View File
@@ -103,16 +103,6 @@ func (c *SessionRecordingConfigV2) GetMetadata() Metadata {
return c.Metadata
}
// GetResourceID returns resource ID.
func (c *SessionRecordingConfigV2) GetResourceID() int64 {
return c.Metadata.ID
}
// SetResourceID sets resource ID.
func (c *SessionRecordingConfigV2) SetResourceID(id int64) {
c.Metadata.ID = id
}
// GetRevision returns the revision
func (c *SessionRecordingConfigV2) GetRevision() string {
return c.Metadata.GetRevision()
-10
View File
@@ -71,16 +71,6 @@ func (c *StaticTokensV2) SetSubKind(sk string) {
c.SubKind = sk
}
// GetResourceID returns resource ID
func (c *StaticTokensV2) GetResourceID() int64 {
return c.Metadata.ID
}
// SetResourceID sets resource ID
func (c *StaticTokensV2) SetResourceID(id int64) {
c.Metadata.ID = id
}
// GetRevision returns the revision
func (c *StaticTokensV2) GetRevision() string {
return c.Metadata.GetRevision()
-10
View File
@@ -122,16 +122,6 @@ func (c *TrustedClusterV2) SetSubKind(s string) {
c.SubKind = s
}
// GetResourceID returns resource ID
func (c *TrustedClusterV2) GetResourceID() int64 {
return c.Metadata.ID
}
// SetResourceID sets resource ID
func (c *TrustedClusterV2) SetResourceID(id int64) {
c.Metadata.ID = id
}
// GetRevision returns the revision
func (c *TrustedClusterV2) GetRevision() string {
return c.Metadata.GetRevision()
-10
View File
@@ -78,16 +78,6 @@ func (r *ReverseTunnelV2) SetSubKind(s string) {
r.SubKind = s
}
// GetResourceID returns resource ID
func (r *ReverseTunnelV2) GetResourceID() int64 {
return r.Metadata.ID
}
// SetResourceID sets resource ID
func (r *ReverseTunnelV2) SetResourceID(id int64) {
r.Metadata.ID = id
}
// GetRevision returns the revision
func (r *ReverseTunnelV2) GetRevision() string {
return r.Metadata.GetRevision()
-10
View File
@@ -85,16 +85,6 @@ func (r *TunnelConnectionV2) SetSubKind(s string) {
r.SubKind = s
}
// GetResourceID returns resource ID
func (r *TunnelConnectionV2) GetResourceID() int64 {
return r.Metadata.ID
}
// SetResourceID sets resource ID
func (r *TunnelConnectionV2) SetResourceID(id int64) {
r.Metadata.ID = id
}
// GetRevision returns the revision
func (r *TunnelConnectionV2) GetRevision() string {
return r.Metadata.GetRevision()
+1619 -1680
View File
File diff suppressed because it is too large Load Diff
-10
View File
@@ -100,16 +100,6 @@ func (c *UIConfigV1) GetMetadata() Metadata {
return c.Metadata
}
// GetResourceID returns resource ID.
func (c *UIConfigV1) GetResourceID() int64 {
return c.Metadata.ID
}
// SetResourceID sets resource ID.
func (c *UIConfigV1) SetResourceID(id int64) {
c.Metadata.ID = id
}
// GetKind returns resource kind.
func (c *UIConfigV1) GetKind() string {
return c.Kind
-10
View File
@@ -191,16 +191,6 @@ func (u *UserV2) SetSubKind(s string) {
u.SubKind = s
}
// GetResourceID returns resource ID
func (u *UserV2) GetResourceID() int64 {
return u.Metadata.ID
}
// SetResourceID sets resource ID
func (u *UserV2) SetResourceID(id int64) {
u.Metadata.ID = id
}
// GetRevision returns the revision
func (u *UserV2) GetRevision() string {
return u.Metadata.GetRevision()
-10
View File
@@ -123,16 +123,6 @@ func (u *UserTokenV3) GetKind() string {
return u.Kind
}
// GetResourceID returns resource ID
func (u *UserTokenV3) GetResourceID() int64 {
return u.Metadata.ID
}
// SetResourceID sets resource ID
func (u *UserTokenV3) SetResourceID(id int64) {
u.Metadata.ID = id
}
// GetRevision returns the revision
func (u *UserTokenV3) GetRevision() string {
return u.Metadata.GetRevision()
-10
View File
@@ -119,16 +119,6 @@ func (u *UserTokenSecretsV3) SetName(name string) {
u.Metadata.Name = name
}
// GetResourceID returns resource ID
func (u *UserTokenSecretsV3) GetResourceID() int64 {
return u.Metadata.ID
}
// SetResourceID sets resource ID
func (u *UserTokenSecretsV3) SetResourceID(id int64) {
u.Metadata.ID = id
}
// GetRevision returns the revision
func (u *UserTokenSecretsV3) GetRevision() string {
return u.Metadata.GetRevision()
-10
View File
@@ -79,16 +79,6 @@ func (w *WatchStatusV1) GetMetadata() Metadata {
return w.Metadata
}
// GetResourceID returns the watch status resource ID.
func (w *WatchStatusV1) GetResourceID() int64 {
return w.Metadata.ID
}
// SetResourceID sets the watch status resource ID.
func (w *WatchStatusV1) SetResourceID(id int64) {
w.Metadata.ID = id
}
// GetRevision returns the revision
func (w *WatchStatusV1) GetRevision() string {
return w.Metadata.GetRevision()
-16
View File
@@ -68,14 +68,6 @@ export interface Metadata {
* @generated from protobuf field: google.protobuf.Timestamp expires = 6;
*/
expires?: Timestamp;
/**
* ID is a record ID
* Deprecated: Use revision instead.
*
* @deprecated
* @generated from protobuf field: int64 id = 7 [deprecated = true];
*/
id: bigint;
/**
* revision is an opaque identifier which tracks the versions of a resource
* over time. Clients should ignore and not alter its value but must return
@@ -94,7 +86,6 @@ class Metadata$Type extends MessageType<Metadata> {
{ no: 3, name: "description", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
{ no: 5, name: "labels", kind: "map", K: 9 /*ScalarType.STRING*/, V: { kind: "scalar", T: 9 /*ScalarType.STRING*/ } },
{ no: 6, name: "expires", kind: "message", T: () => Timestamp },
{ no: 7, name: "id", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ },
{ no: 8, name: "revision", kind: "scalar", T: 9 /*ScalarType.STRING*/ }
]);
}
@@ -104,7 +95,6 @@ class Metadata$Type extends MessageType<Metadata> {
message.namespace = "";
message.description = "";
message.labels = {};
message.id = 0n;
message.revision = "";
if (value !== undefined)
reflectionMergePartial<Metadata>(this, message, value);
@@ -130,9 +120,6 @@ class Metadata$Type extends MessageType<Metadata> {
case /* google.protobuf.Timestamp expires */ 6:
message.expires = Timestamp.internalBinaryRead(reader, reader.uint32(), options, message.expires);
break;
case /* int64 id = 7 [deprecated = true];*/ 7:
message.id = reader.int64().toBigInt();
break;
case /* string revision */ 8:
message.revision = reader.string();
break;
@@ -179,9 +166,6 @@ class Metadata$Type extends MessageType<Metadata> {
/* google.protobuf.Timestamp expires = 6; */
if (message.expires)
Timestamp.internalBinaryWrite(message.expires, writer.tag(6, WireType.LengthDelimited).fork(), options).join();
/* int64 id = 7 [deprecated = true]; */
if (message.id !== 0n)
writer.tag(7, WireType.Varint).int64(message.id);
/* string revision = 8; */
if (message.revision !== "")
writer.tag(8, WireType.LengthDelimited).string(message.revision);
@@ -41,10 +41,10 @@ var defaultCompareOpts = []cmp.Option{
// Fixes time precision issues that might be caused by serialization/deserialization
cmpopts.EquateApproxTime(MaxTimeDiff),
// New resource headers
cmpopts.IgnoreFields(header.Metadata{}, "ID", "Labels", "Revision"),
cmpopts.IgnoreFields(header.Metadata{}, "Labels", "Revision"),
cmpopts.IgnoreFields(header.ResourceHeader{}, "Kind"),
// Legacy gogoproto resource headers
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Labels", "Revision", "Namespace"),
cmpopts.IgnoreFields(types.Metadata{}, "Labels", "Revision", "Namespace"),
cmpopts.IgnoreFields(types.ResourceHeader{}, "Kind"),
}
+1 -2
View File
@@ -285,11 +285,10 @@ var (
CreateMethod: "UpsertToken",
UpdateMethod: "UpsertToken",
DeleteMethod: "DeleteToken",
ID: "strconv.FormatInt(provisionToken.Metadata.ID, 10)", // must be a string
ID: "provisionToken.Metadata.Revision", // must be a string
RandomMetadataName: true,
Kind: "token",
HasStaticID: false,
ExtraImports: []string{"strconv"},
SchemaPackage: "token",
SchemaPackagePath: "github.com/gravitational/teleport/integrations/terraform/tfschema/token",
TerraformResourceType: "teleport_provision_token",
@@ -22,7 +22,6 @@ import (
"crypto/rand"
"encoding/hex"
"fmt"
"strconv"
apitypes "github.com/gravitational/teleport/api/types"
@@ -157,7 +156,7 @@ func (r resourceTeleportProvisionToken) Create(ctx context.Context, req tfsdk.Cr
return
}
plan.Attrs["id"] = types.String{Value: strconv.FormatInt(provisionToken.Metadata.ID, 10)}
plan.Attrs["id"] = types.String{Value: provisionToken.Metadata.Revision}
diags = resp.State.Set(ctx, &plan)
resp.Diagnostics.Append(diags...)
@@ -89,7 +89,7 @@ func (s *TerraformSuiteOSS) TestImportAuthPreference() {
authPreferencesCurrent, err := s.client.GetAuthPreference(ctx)
require.NoError(s.T(), err)
return authPreferencesBefore.GetMetadata().ID != authPreferencesCurrent.GetMetadata().ID
return authPreferencesBefore.GetMetadata().Revision != authPreferencesCurrent.GetMetadata().Revision
}, 5*time.Second, time.Second)
resource.Test(s.T(), resource.TestCase{
@@ -90,7 +90,7 @@ func (s *TerraformSuiteOSS) TestImportClusterNetworkingConfig() {
clusterNetworkConfigCurrent, err := s.client.GetClusterNetworkingConfig(ctx)
require.NoError(s.T(), err)
return clusterNetworkConfigBefore.GetMetadata().ID != clusterNetworkConfigCurrent.GetMetadata().ID
return clusterNetworkConfigBefore.GetMetadata().Revision != clusterNetworkConfigCurrent.GetMetadata().Revision
}, 5*time.Second, time.Second)
resource.Test(s.T(), resource.TestCase{
@@ -87,7 +87,7 @@ func (s *TerraformSuiteOSS) TestImportSessionRecordingConfig() {
recordingConfigCurrent, err := s.client.GetSessionRecordingConfig(ctx)
require.NoError(s.T(), err)
return recordingConfigBefore.GetMetadata().ID != recordingConfigCurrent.GetMetadata().ID
return recordingConfigBefore.GetMetadata().Revision != recordingConfigCurrent.GetMetadata().Revision
}, 5*time.Second, time.Second)
resource.Test(s.T(), resource.TestCase{
+5 -5
View File
@@ -328,7 +328,7 @@ func TestCreateRole(t *testing.T) {
require.Nil(t, got)
} else {
require.Empty(t, cmp.Diff(test.want, got,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
}
})
@@ -483,7 +483,7 @@ func TestUpdateRole(t *testing.T) {
require.Nil(t, got)
} else {
require.Empty(t, cmp.Diff(test.want, got,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
}
})
@@ -627,7 +627,7 @@ func TestUpsertRole(t *testing.T) {
require.Nil(t, got)
} else {
require.Empty(t, cmp.Diff(test.want, got,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
}
})
@@ -744,7 +744,7 @@ func TestGetRole(t *testing.T) {
require.Nil(t, got)
} else {
require.Empty(t, cmp.Diff(test.want, got,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
}
})
@@ -856,7 +856,7 @@ func TestGetRoles(t *testing.T) {
require.Nil(t, got)
} else {
require.Empty(t, cmp.Diff(test.want, got,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
cmpopts.SortSlices(func(r1, r2 types.Role) bool {
return r1.GetName() < r2.GetName()
}),
+9 -9
View File
@@ -341,7 +341,7 @@ func (s *APIServer) getAuthServers(auth *ServerWithRoles, w http.ResponseWriter,
func marshalServers(servers []types.Server, version string) (interface{}, error) {
items := make([]json.RawMessage, len(servers))
for i, server := range servers {
data, err := services.MarshalServer(server, services.WithVersion(version), services.PreserveResourceID())
data, err := services.MarshalServer(server, services.WithVersion(version), services.PreserveRevision())
if err != nil {
return nil, trace.Wrap(err)
}
@@ -385,7 +385,7 @@ func (s *APIServer) getReverseTunnels(auth *ServerWithRoles, w http.ResponseWrit
}
items := make([]json.RawMessage, len(reverseTunnels))
for i, tunnel := range reverseTunnels {
data, err := services.MarshalReverseTunnel(tunnel, services.WithVersion(version), services.PreserveResourceID())
data, err := services.MarshalReverseTunnel(tunnel, services.WithVersion(version), services.PreserveRevision())
if err != nil {
return nil, trace.Wrap(err)
}
@@ -589,7 +589,7 @@ func (s *APIServer) validateGithubAuthCallback(auth *ServerWithRoles, w http.Res
}
if response.Session != nil {
rawSession, err := services.MarshalWebSession(
response.Session, services.WithVersion(version), services.PreserveResourceID())
response.Session, services.WithVersion(version), services.PreserveRevision())
if err != nil {
return nil, trace.Wrap(err)
}
@@ -598,7 +598,7 @@ func (s *APIServer) validateGithubAuthCallback(auth *ServerWithRoles, w http.Res
raw.HostSigners = make([]json.RawMessage, len(response.HostSigners))
for i, ca := range response.HostSigners {
data, err := services.MarshalCertAuthority(
ca, services.WithVersion(version), services.PreserveResourceID())
ca, services.WithVersion(version), services.PreserveRevision())
if err != nil {
return nil, trace.Wrap(err)
}
@@ -818,7 +818,7 @@ func (s *APIServer) getClusterName(auth *ServerWithRoles, w http.ResponseWriter,
return nil, trace.Wrap(err)
}
return rawMessage(services.MarshalClusterName(cn, services.WithVersion(version), services.PreserveResourceID()))
return rawMessage(services.MarshalClusterName(cn, services.WithVersion(version), services.PreserveRevision()))
}
type setClusterNameReq struct {
@@ -874,7 +874,7 @@ func (s *APIServer) getTunnelConnections(auth *ServerWithRoles, w http.ResponseW
}
items := make([]json.RawMessage, len(conns))
for i, conn := range conns {
data, err := services.MarshalTunnelConnection(conn, services.WithVersion(version), services.PreserveResourceID())
data, err := services.MarshalTunnelConnection(conn, services.WithVersion(version), services.PreserveRevision())
if err != nil {
return nil, trace.Wrap(err)
}
@@ -891,7 +891,7 @@ func (s *APIServer) getAllTunnelConnections(auth *ServerWithRoles, w http.Respon
}
items := make([]json.RawMessage, len(conns))
for i, conn := range conns {
data, err := services.MarshalTunnelConnection(conn, services.WithVersion(version), services.PreserveResourceID())
data, err := services.MarshalTunnelConnection(conn, services.WithVersion(version), services.PreserveRevision())
if err != nil {
return nil, trace.Wrap(err)
}
@@ -935,7 +935,7 @@ func (s *APIServer) getRemoteClusters(auth *ServerWithRoles, w http.ResponseWrit
}
items := make([]json.RawMessage, len(clusters))
for i, cluster := range clusters {
data, err := services.MarshalRemoteCluster(cluster, services.WithVersion(version), services.PreserveResourceID())
data, err := services.MarshalRemoteCluster(cluster, services.WithVersion(version), services.PreserveRevision())
if err != nil {
return nil, trace.Wrap(err)
}
@@ -950,7 +950,7 @@ func (s *APIServer) getRemoteCluster(auth *ServerWithRoles, w http.ResponseWrite
if err != nil {
return nil, trace.Wrap(err)
}
return rawMessage(services.MarshalRemoteCluster(cluster, services.WithVersion(version), services.PreserveResourceID()))
return rawMessage(services.MarshalRemoteCluster(cluster, services.WithVersion(version), services.PreserveRevision()))
}
// deleteRemoteCluster deletes remote cluster by name
+1 -1
View File
@@ -138,7 +138,7 @@ func TestUpsertServer(t *testing.T) {
addServers(s.GetAuthServers())
addServers(s.GetNodes(ctx, apidefaults.Namespace))
addServers(s.GetProxies())
require.Empty(t, cmp.Diff(allServers, []types.Server{tt.wantServer}, cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
require.Empty(t, cmp.Diff(allServers, []types.Server{tt.wantServer}, cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
})
}
}
+1 -1
View File
@@ -243,7 +243,7 @@ func TestSessions(t *testing.T) {
out, err := s.a.GetWebSessionInfo(ctx, user, ws.GetName())
require.NoError(t, err)
ws.SetPriv(nil)
require.Empty(t, cmp.Diff(ws, out, cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
require.Empty(t, cmp.Diff(ws, out, cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
err = s.a.WebSessions().Delete(ctx, types.DeleteWebSessionRequest{
User: user,
+15 -15
View File
@@ -2052,33 +2052,33 @@ func TestDatabasesCRUDRBAC(t *testing.T) {
db, err := devClt.GetDatabase(ctx, devDatabase.GetName())
require.NoError(t, err)
require.Empty(t, cmp.Diff(devDatabase, db,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
// Admin can get both databases.
db, err = adminClt.GetDatabase(ctx, adminDatabase.GetName())
require.NoError(t, err)
require.Empty(t, cmp.Diff(adminDatabase, db,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
db, err = adminClt.GetDatabase(ctx, devDatabase.GetName())
require.NoError(t, err)
require.Empty(t, cmp.Diff(devDatabase, db,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
// When listing databases, dev should only see one.
dbs, err := devClt.GetDatabases(ctx)
require.NoError(t, err)
require.Empty(t, cmp.Diff([]types.Database{devDatabase}, dbs,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
// Admin should see both.
dbs, err = adminClt.GetDatabases(ctx)
require.NoError(t, err)
require.Empty(t, cmp.Diff([]types.Database{adminDatabase, devDatabase}, dbs,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
// Dev shouldn't be able to delete dev database...
@@ -2172,7 +2172,7 @@ func mustGetDatabases(t *testing.T, client *authclient.Client, wantDatabases []t
require.NoError(t, err)
require.Empty(t, cmp.Diff(wantDatabases, actualDatabases,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
cmpopts.EquateEmpty(),
))
}
@@ -2227,7 +2227,7 @@ func TestKubernetesClusterCRUD_DiscoveryService(t *testing.T) {
t.Run("Read", func(t *testing.T) {
clusters, err := discoveryClt.GetKubernetesClusters(ctx)
require.NoError(t, err)
require.Empty(t, cmp.Diff([]types.KubeCluster{eksCluster}, clusters, cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
require.Empty(t, cmp.Diff([]types.KubeCluster{eksCluster}, clusters, cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
})
t.Run("Update", func(t *testing.T) {
require.NoError(t, discoveryClt.UpdateKubernetesCluster(ctx, eksCluster))
@@ -2849,33 +2849,33 @@ func TestApps(t *testing.T) {
app, err := devClt.GetApp(ctx, devApp.GetName())
require.NoError(t, err)
require.Empty(t, cmp.Diff(devApp, app,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
// Admin can get both apps.
app, err = adminClt.GetApp(ctx, adminApp.GetName())
require.NoError(t, err)
require.Empty(t, cmp.Diff(adminApp, app,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
app, err = adminClt.GetApp(ctx, devApp.GetName())
require.NoError(t, err)
require.Empty(t, cmp.Diff(devApp, app,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
// When listing apps, dev should only see one.
apps, err := devClt.GetApps(ctx)
require.NoError(t, err)
require.Empty(t, cmp.Diff([]types.Application{devApp}, apps,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
// Admin should see both.
apps, err = adminClt.GetApps(ctx)
require.NoError(t, err)
require.Empty(t, cmp.Diff([]types.Application{adminApp, devApp}, apps,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
// Dev shouldn't be able to delete dev app...
@@ -2900,7 +2900,7 @@ func TestApps(t *testing.T) {
apps, err = adminClt.GetApps(ctx)
require.NoError(t, err)
require.Empty(t, cmp.Diff([]types.Application{adminApp}, apps,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
// Admin should be able to delete all.
@@ -4113,7 +4113,7 @@ func TestListResources_KindUserGroup(t *testing.T) {
slices.SortFunc(userGroups, func(a, b types.UserGroup) int {
return strings.Compare(a.GetName(), b.GetName())
})
require.Empty(t, cmp.Diff([]types.UserGroup{testUg2, testUg3, testUg1}, userGroups, cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
require.Empty(t, cmp.Diff([]types.UserGroup{testUg2, testUg3, testUg1}, userGroups, cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
})
t.Run("start keys", func(t *testing.T) {
@@ -7243,7 +7243,7 @@ func TestCreateAccessRequest(t *testing.T) {
// We have to ignore the name here, as it's auto-generated by the underlying access request
// logic.
require.Empty(t, cmp.Diff(test.expected, accessRequests[0],
cmpopts.IgnoreFields(types.Metadata{}, "Name", "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Name", "Revision"),
cmpopts.IgnoreFields(types.AccessRequestSpecV3{}),
))
})
+26 -26
View File
@@ -2736,7 +2736,7 @@ func TestNodesCRUD(t *testing.T) {
require.NoError(t, err)
require.Len(t, nodes, 2)
require.Empty(t, cmp.Diff([]types.Server{node1, node2}, nodes,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
// GetNodes should not fail if namespace is empty
_, err = clt.GetNodes(ctx, "")
@@ -2748,7 +2748,7 @@ func TestNodesCRUD(t *testing.T) {
node, err := clt.GetNode(ctx, apidefaults.Namespace, "node1")
require.NoError(t, err)
require.Empty(t, cmp.Diff(node1, node,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
// GetNode should fail if node name isn't provided
_, err = clt.GetNode(ctx, apidefaults.Namespace, "")
@@ -2847,7 +2847,7 @@ func TestLocksCRUD(t *testing.T) {
require.NoError(t, err)
require.Len(t, locks, 2)
require.Empty(t, cmp.Diff([]types.Lock{lock1, lock2}, locks,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
})
t.Run("GetLocks with targets", func(t *testing.T) {
t.Parallel()
@@ -2856,7 +2856,7 @@ func TestLocksCRUD(t *testing.T) {
require.NoError(t, err)
require.Len(t, locks, 2)
require.Empty(t, cmp.Diff([]types.Lock{lock1, lock2}, locks,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
// Match only one of the locks.
roleTarget := types.LockTarget{Role: "role-A"}
@@ -2864,7 +2864,7 @@ func TestLocksCRUD(t *testing.T) {
require.NoError(t, err)
require.Len(t, locks, 1)
require.Empty(t, cmp.Diff([]types.Lock{lock1}, locks,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
// Match none of the locks.
locks, err = clt.GetLocks(ctx, false, roleTarget)
@@ -2877,7 +2877,7 @@ func TestLocksCRUD(t *testing.T) {
lock, err := clt.GetLock(ctx, lock1.GetName())
require.NoError(t, err)
require.Empty(t, cmp.Diff(lock1, lock,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
// Attempt to get a nonexistent lock.
_, err = clt.GetLock(ctx, "lock3")
@@ -2957,7 +2957,7 @@ func TestApplicationServersCRUD(t *testing.T) {
out, err = clt.GetApplicationServers(ctx, apidefaults.Namespace)
require.NoError(t, err)
require.Empty(t, cmp.Diff([]types.AppServer{server1, server2, server3}, out,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
// Update an app server.
@@ -2967,7 +2967,7 @@ func TestApplicationServersCRUD(t *testing.T) {
out, err = clt.GetApplicationServers(ctx, apidefaults.Namespace)
require.NoError(t, err)
require.Empty(t, cmp.Diff([]types.AppServer{server1, server2, server3}, out,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
// Delete an app server.
@@ -2976,7 +2976,7 @@ func TestApplicationServersCRUD(t *testing.T) {
out, err = clt.GetApplicationServers(ctx, apidefaults.Namespace)
require.NoError(t, err)
require.Empty(t, cmp.Diff([]types.AppServer{server2, server3}, out,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
// Delete all app servers.
@@ -3027,14 +3027,14 @@ func TestAppsCRUD(t *testing.T) {
out, err = clt.GetApps(ctx)
require.NoError(t, err)
require.Empty(t, cmp.Diff([]types.Application{app1, app2}, out,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
// Fetch a specific app.
app, err := clt.GetApp(ctx, app2.GetName())
require.NoError(t, err)
require.Empty(t, cmp.Diff(app2, app,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
// Try to fetch an app that doesn't exist.
@@ -3052,7 +3052,7 @@ func TestAppsCRUD(t *testing.T) {
app, err = clt.GetApp(ctx, app1.GetName())
require.NoError(t, err)
require.Empty(t, cmp.Diff(app1, app,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
// Delete an app.
@@ -3061,7 +3061,7 @@ func TestAppsCRUD(t *testing.T) {
out, err = clt.GetApps(ctx)
require.NoError(t, err)
require.Empty(t, cmp.Diff([]types.Application{app2}, out,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
// Try to delete an app that doesn't exist.
@@ -3108,7 +3108,7 @@ func TestAppServersCRUD(t *testing.T) {
appServer := resources.Resources[0].(types.AppServer)
require.Empty(t, cmp.Diff(appServer, appServer1,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
require.NoError(t, clt.DeleteApplicationServer(ctx, apidefaults.Namespace, "hostID", appServer1.GetName()))
@@ -3161,7 +3161,7 @@ func TestAppServersCRUD(t *testing.T) {
app2.SetOrigin(types.OriginOkta)
appServer = resources.Resources[0].(types.AppServer)
require.Empty(t, cmp.Diff(appServer, appServer2,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
require.NoError(t, clt.DeleteApplicationServer(ctx, apidefaults.Namespace, "hostID", appServer2.GetName()))
@@ -3216,14 +3216,14 @@ func TestDatabasesCRUD(t *testing.T) {
out, err = clt.GetDatabases(ctx)
require.NoError(t, err)
require.Empty(t, cmp.Diff([]types.Database{db1, db2}, out,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
// Fetch a specific database.
db, err := clt.GetDatabase(ctx, db2.GetName())
require.NoError(t, err)
require.Empty(t, cmp.Diff(db2, db,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
// Try to fetch a database that doesn't exist.
@@ -3241,7 +3241,7 @@ func TestDatabasesCRUD(t *testing.T) {
db, err = clt.GetDatabase(ctx, db1.GetName())
require.NoError(t, err)
require.Empty(t, cmp.Diff(db1, db,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
// Delete a database.
@@ -3250,7 +3250,7 @@ func TestDatabasesCRUD(t *testing.T) {
out, err = clt.GetDatabases(ctx)
require.NoError(t, err)
require.Empty(t, cmp.Diff([]types.Database{db2}, out,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
// Try to delete a database that doesn't exist.
@@ -3332,7 +3332,7 @@ func TestDatabaseServicesCRUD(t *testing.T) {
out, err = types.ResourcesWithLabels(listServicesResp.Resources).AsDatabaseServices()
require.NoError(t, err)
require.Empty(t, cmp.Diff([]types.DatabaseService{db1, db2}, out,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
// Update a DatabaseService.
@@ -3354,7 +3354,7 @@ func TestDatabaseServicesCRUD(t *testing.T) {
out, err = types.ResourcesWithLabels(listServicesResp.Resources).AsDatabaseServices()
require.NoError(t, err)
require.Empty(t, cmp.Diff([]types.DatabaseService{db1, db2}, out,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
// Delete a DatabaseService.
@@ -3370,7 +3370,7 @@ func TestDatabaseServicesCRUD(t *testing.T) {
out, err = types.ResourcesWithLabels(listServicesResp.Resources).AsDatabaseServices()
require.NoError(t, err)
require.Empty(t, cmp.Diff([]types.DatabaseService{db2}, out,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
// Try to delete a DatabaseService that doesn't exist.
@@ -3433,7 +3433,7 @@ func TestServerInfoCRUD(t *testing.T) {
}
requireResourcesEqual := func(t *testing.T, expected, actual interface{}) {
require.Empty(t, cmp.Diff(expected, actual, cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
require.Empty(t, cmp.Diff(expected, actual, cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
}
t.Run("ServerInfoGetters", func(t *testing.T) {
@@ -3535,7 +3535,7 @@ func TestSAMLIdPServiceProvidersCRUD(t *testing.T) {
require.NoError(t, err)
require.Empty(t, nextKey)
require.Empty(t, cmp.Diff([]types.SAMLIdPServiceProvider{sp1, sp2}, listResp,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
// Update a service provider.
@@ -3548,7 +3548,7 @@ func TestSAMLIdPServiceProvidersCRUD(t *testing.T) {
require.NoError(t, err)
require.Empty(t, nextKey)
require.Empty(t, cmp.Diff([]types.SAMLIdPServiceProvider{sp1, sp2}, listResp,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
// Delete a service provider.
@@ -3558,7 +3558,7 @@ func TestSAMLIdPServiceProvidersCRUD(t *testing.T) {
require.NoError(t, err)
require.Empty(t, nextKey)
require.Empty(t, cmp.Diff([]types.SAMLIdPServiceProvider{sp2}, listResp,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
// Try to delete a service provider that doesn't exist.
+1 -1
View File
@@ -1523,7 +1523,7 @@ func resourceFromYAML(t *testing.T, value string) types.Resource {
func resourceDiff(res1, res2 types.Resource) string {
return cmp.Diff(res1, res2,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision", "Namespace"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision", "Namespace"),
cmpopts.EquateEmpty())
}
@@ -340,7 +340,7 @@ func TestCreateBot(t *testing.T) {
cmp.Diff(
tt.wantUser,
gotUser,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
cmpopts.IgnoreFields(types.CreatedBy{}, "Time"),
),
)
@@ -353,7 +353,7 @@ func TestCreateBot(t *testing.T) {
require.Empty(t, cmp.Diff(
tt.wantRole,
gotUser,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")),
cmpopts.IgnoreFields(types.Metadata{}, "Revision")),
)
}
})
@@ -704,7 +704,7 @@ func TestUpdateBot(t *testing.T) {
cmp.Diff(
tt.wantUser,
gotUser,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
cmpopts.IgnoreFields(types.CreatedBy{}, "Time"),
),
)
@@ -716,7 +716,7 @@ func TestUpdateBot(t *testing.T) {
require.Empty(t, cmp.Diff(
tt.wantRole,
gotUser,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")),
cmpopts.IgnoreFields(types.Metadata{}, "Revision")),
)
}
})
@@ -1029,7 +1029,7 @@ func TestUpsertBot(t *testing.T) {
cmp.Diff(
tt.wantUser,
gotUser,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
cmpopts.IgnoreFields(types.CreatedBy{}, "Time"),
),
)
@@ -1041,7 +1041,7 @@ func TestUpsertBot(t *testing.T) {
require.Empty(t, cmp.Diff(
tt.wantRole,
gotUser,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")),
cmpopts.IgnoreFields(types.Metadata{}, "Revision")),
)
}
})
+7 -7
View File
@@ -65,7 +65,7 @@ func TestOktaImportRules(t *testing.T) {
require.NoError(t, err)
require.Empty(t, listResp.NextPageToken)
require.Empty(t, cmp.Diff([]*types.OktaImportRuleV1{r1, r2, r3}, listResp.ImportRules,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
r1.SetExpiry(time.Now().Add(30 * time.Minute))
updateResp, err := svc.UpdateOktaImportRule(ctx, &oktapb.UpdateOktaImportRuleRequest{ImportRule: r1})
@@ -75,7 +75,7 @@ func TestOktaImportRules(t *testing.T) {
r, err := svc.GetOktaImportRule(ctx, &oktapb.GetOktaImportRuleRequest{Name: r1.GetName()})
require.NoError(t, err)
require.Empty(t, cmp.Diff(r1, r,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
_, err = svc.DeleteOktaImportRule(ctx, &oktapb.DeleteOktaImportRuleRequest{Name: r1.GetName()})
require.NoError(t, err)
@@ -84,7 +84,7 @@ func TestOktaImportRules(t *testing.T) {
require.NoError(t, err)
require.Empty(t, listResp.NextPageToken)
require.Empty(t, cmp.Diff([]*types.OktaImportRuleV1{r2, r3}, listResp.ImportRules,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
_, err = svc.DeleteAllOktaImportRules(ctx, &oktapb.DeleteAllOktaImportRulesRequest{})
require.NoError(t, err)
@@ -123,7 +123,7 @@ func TestOktaAssignments(t *testing.T) {
require.NoError(t, err)
require.Empty(t, listResp.NextPageToken)
require.Empty(t, cmp.Diff([]*types.OktaAssignmentV1{a1, a2, a3}, listResp.Assignments,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
a1.SetExpiry(time.Now().Add(30 * time.Minute))
updateResp, err := svc.UpdateOktaAssignment(ctx, &oktapb.UpdateOktaAssignmentRequest{Assignment: a1})
@@ -133,7 +133,7 @@ func TestOktaAssignments(t *testing.T) {
a, err := svc.GetOktaAssignment(ctx, &oktapb.GetOktaAssignmentRequest{Name: a1.GetName()})
require.NoError(t, err)
require.Empty(t, cmp.Diff(a1, a,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
_, err = svc.UpdateOktaAssignmentStatus(ctx, &oktapb.UpdateOktaAssignmentStatusRequest{
Name: a1.GetName(),
@@ -146,7 +146,7 @@ func TestOktaAssignments(t *testing.T) {
require.NoError(t, err)
a1.SetLastTransition(a.GetLastTransition())
require.Empty(t, cmp.Diff(a1, a,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
_, err = svc.DeleteOktaAssignment(ctx, &oktapb.DeleteOktaAssignmentRequest{Name: a1.GetName()})
require.NoError(t, err)
@@ -155,7 +155,7 @@ func TestOktaAssignments(t *testing.T) {
require.NoError(t, err)
require.Empty(t, listResp.NextPageToken)
require.Empty(t, cmp.Diff([]*types.OktaAssignmentV1{a2, a3}, listResp.Assignments,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
_, err = svc.DeleteAllOktaAssignments(ctx, &oktapb.DeleteAllOktaAssignmentsRequest{})
require.NoError(t, err)
+1 -1
View File
@@ -661,7 +661,7 @@ func TestUpdateRemoteCluster(t *testing.T) {
cmp.Diff(
tt.want,
got,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
),
)
}
+8 -8
View File
@@ -1347,7 +1347,7 @@ func TestGetCurrentUser(t *testing.T) {
Spec: types.UserSpecV2{
Roles: []string{"user:user1"},
},
}, currentUser, cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
}, currentUser, cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
}
func TestGetCurrentUserRoles(t *testing.T) {
@@ -1362,7 +1362,7 @@ func TestGetCurrentUserRoles(t *testing.T) {
roles, err := client1.GetCurrentUserRoles(ctx)
require.NoError(t, err)
require.Empty(t, cmp.Diff(roles, []types.Role{user1Role}, cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
require.Empty(t, cmp.Diff(roles, []types.Role{user1Role}, cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
}
func TestAuthPreferenceSettings(t *testing.T) {
@@ -1390,7 +1390,7 @@ func TestAuthPreferenceSettings(t *testing.T) {
require.Equal(t, "local", gotAP.GetType())
require.Equal(t, constants.SecondFactorOTP, gotAP.GetSecondFactor())
require.True(t, gotAP.GetDisconnectExpiredCert())
require.Empty(t, cmp.Diff(upsertedAP, gotAP, cmpopts.IgnoreFields(types.Metadata{}, "ID")))
require.Empty(t, cmp.Diff(upsertedAP, gotAP, cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
}
func TestTunnelConnectionsCRUD(t *testing.T) {
@@ -1445,7 +1445,7 @@ func TestRemoteClustersCRUD(t *testing.T) {
cmp.Diff(
rc,
updated,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
cmpopts.IgnoreFields(types.RemoteClusterStatusV3{}, "Connection"),
),
)
@@ -4443,7 +4443,7 @@ func TestGRPCServer_CreateTokenV2(t *testing.T) {
require.Empty(t, cmp.Diff(
tt.token,
token,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
}
})
@@ -4613,7 +4613,7 @@ func TestGRPCServer_UpsertTokenV2(t *testing.T) {
require.Empty(t, cmp.Diff(
tt.token,
token,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
}
})
@@ -4703,7 +4703,7 @@ func TestGRPCServer_GetTokens(t *testing.T) {
require.Empty(t, cmp.Diff(
expectTokens,
tokens,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
} else {
require.Empty(t, tokens)
@@ -4773,7 +4773,7 @@ func TestGRPCServer_GetToken(t *testing.T) {
require.Empty(t, cmp.Diff(
token,
pt,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
} else {
require.Nil(t, token)
+4 -4
View File
@@ -483,7 +483,7 @@ func TestGetCertAuthority(t *testing.T) {
assertion: func(t *testing.T, authority types.CertAuthority, err error) {
require.NoError(t, err)
require.Empty(t, cmp.Diff(authority, ca,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
cmpopts.IgnoreFields(types.SSHKeyPair{}, "PrivateKey"),
cmpopts.IgnoreFields(types.TLSKeyPair{}, "Key"),
cmpopts.IgnoreFields(types.JWTKeyPair{}, "PrivateKey"),
@@ -503,7 +503,7 @@ func TestGetCertAuthority(t *testing.T) {
},
assertion: func(t *testing.T, authority types.CertAuthority, err error) {
require.NoError(t, err)
require.Empty(t, cmp.Diff(authority, ca, cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
require.Empty(t, cmp.Diff(authority, ca, cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
},
},
}
@@ -576,7 +576,7 @@ func TestGetCertAuthorities(t *testing.T) {
assertion: func(t *testing.T, resp *trustpb.GetCertAuthoritiesResponse, err error) {
require.NoError(t, err)
require.Empty(t, cmp.Diff(expectedCAs, resp.CertAuthoritiesV2,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
cmpopts.IgnoreFields(types.SSHKeyPair{}, "PrivateKey"),
cmpopts.IgnoreFields(types.TLSKeyPair{}, "Key"),
cmpopts.IgnoreFields(types.JWTKeyPair{}, "PrivateKey"),
@@ -598,7 +598,7 @@ func TestGetCertAuthorities(t *testing.T) {
},
assertion: func(t *testing.T, resp *trustpb.GetCertAuthoritiesResponse, err error) {
require.NoError(t, err)
require.Empty(t, cmp.Diff(expectedCAs, resp.CertAuthoritiesV2, cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
require.Empty(t, cmp.Diff(expectedCAs, resp.CertAuthoritiesV2, cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
},
},
}
+5 -5
View File
@@ -61,7 +61,7 @@ func TestRemoteClusterStatus(t *testing.T) {
wantRC.SetConnectionStatus(teleport.RemoteClusterStatusOffline)
gotRC, err := a.GetRemoteCluster(ctx, rc.GetName())
require.NoError(t, err)
require.Empty(t, cmp.Diff(wantRC, gotRC, cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
require.Empty(t, cmp.Diff(wantRC, gotRC, cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
// Create several tunnel connections.
lastHeartbeat := a.clock.Now().UTC()
@@ -92,7 +92,7 @@ func TestRemoteClusterStatus(t *testing.T) {
wantRC.SetLastHeartbeat(tc2.GetLastHeartbeat())
gotRC, err = a.GetRemoteCluster(ctx, rc.GetName())
require.NoError(t, err)
require.Empty(t, cmp.Diff(rc, gotRC, cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
require.Empty(t, cmp.Diff(rc, gotRC, cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
// Delete the latest connection.
require.NoError(t, a.DeleteTunnelConnection(tc2.GetClusterName(), tc2.GetName()))
@@ -105,7 +105,7 @@ func TestRemoteClusterStatus(t *testing.T) {
wantRC.SetConnectionStatus(teleport.RemoteClusterStatusOnline)
gotRC, err = a.GetRemoteCluster(ctx, rc.GetName())
require.NoError(t, err)
require.Empty(t, cmp.Diff(rc, gotRC, cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
require.Empty(t, cmp.Diff(rc, gotRC, cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
// Delete the remaining connection
require.NoError(t, a.DeleteTunnelConnection(tc1.GetClusterName(), tc1.GetName()))
@@ -117,7 +117,7 @@ func TestRemoteClusterStatus(t *testing.T) {
wantRC.SetConnectionStatus(teleport.RemoteClusterStatusOffline)
gotRC, err = a.GetRemoteCluster(ctx, rc.GetName())
require.NoError(t, err)
require.Empty(t, cmp.Diff(rc, gotRC, cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
require.Empty(t, cmp.Diff(rc, gotRC, cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
}
func TestRefreshRemoteClusters(t *testing.T) {
@@ -195,7 +195,7 @@ func TestRefreshRemoteClusters(t *testing.T) {
var updated int
for _, cluster := range clusters {
old := allClusters[cluster.GetName()]
if cmp.Diff(old, cluster, cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")) != "" {
if cmp.Diff(old, cluster, cmpopts.IgnoreFields(types.Metadata{}, "Revision")) != "" {
updated++
}
}
+1 -1
View File
@@ -49,7 +49,7 @@ const (
var (
// cmpOpts are general cmpOpts for all comparisons across the service tests.
cmpOpts = []cmp.Option{
cmpopts.IgnoreFields(header.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(header.Metadata{}, "Revision"),
cmpopts.SortSlices(func(a, b *userloginstate.UserLoginState) bool {
return a.GetName() < b.GetName()
}),
+15 -15
View File
@@ -218,7 +218,7 @@ func TestCreateUser(t *testing.T) {
// Validate that the user now exists.
resp, err := env.GetUser(ctx, &userspb.GetUserRequest{Name: created.User.GetName()})
require.NoError(t, err, "failed getting created user")
require.Empty(t, cmp.Diff(created.User, resp.User, cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
require.Empty(t, cmp.Diff(created.User, resp.User, cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
// Attempt to create a duplicate user
created2, err := env.CreateUser(ctx, &userspb.CreateUserRequest{User: llama.(*types.UserV2)})
@@ -310,7 +310,7 @@ func TestGetUser(t *testing.T) {
// retrieving the current user.
resp, err = env.GetUser(ctx, &userspb.GetUserRequest{Name: created.User.GetName(), CurrentUser: true})
assert.NoError(t, err, "failed getting created user")
assert.Empty(t, cmp.Diff(created.User, resp.User, cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"), cmpopts.IgnoreFields(types.UserSpecV2{}, "LocalAuth")))
assert.Empty(t, cmp.Diff(created.User, resp.User, cmpopts.IgnoreFields(types.Metadata{}, "Revision"), cmpopts.IgnoreFields(types.UserSpecV2{}, "LocalAuth")))
assert.Nil(t, resp.User.GetLocalAuth(), "user secrets were provided when not requested")
// Validate that getting the current user returns "alice" and not "llama".
@@ -321,14 +321,14 @@ func TestGetUser(t *testing.T) {
},
}), &userspb.GetUserRequest{CurrentUser: true})
assert.NoError(t, err, "failed getting created user")
assert.NotEmpty(t, cmp.Diff(created.User, resp.User, cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
assert.NotEmpty(t, cmp.Diff(created.User, resp.User, cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
assert.Equal(t, "alice", resp.User.GetName(), "expected current user to return alice")
assert.Nil(t, resp.User.GetLocalAuth(), "secrets returned with current user")
// Validate that requesting a users secrets returns them.
resp, err = env.GetUser(ctx, &userspb.GetUserRequest{Name: created.User.GetName(), WithSecrets: true})
assert.NoError(t, err, "failed getting created user")
assert.Empty(t, cmp.Diff(created.User, resp.User, cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
assert.Empty(t, cmp.Diff(created.User, resp.User, cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
assert.NotNil(t, resp.User.GetLocalAuth(), "user secrets were not provided requested")
assert.Empty(t, cmp.Diff(llama.GetLocalAuth(), resp.User.GetLocalAuth()), "user secrets do not match")
@@ -340,7 +340,7 @@ func TestGetUser(t *testing.T) {
},
}), &userspb.GetUserRequest{CurrentUser: true, WithSecrets: true})
assert.NoError(t, err, "failed getting created user")
assert.NotEmpty(t, cmp.Diff(created.User, resp.User, cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
assert.NotEmpty(t, cmp.Diff(created.User, resp.User, cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
assert.Equal(t, "alice", resp.User.GetName(), "expected current user to return alice")
assert.Nil(t, resp.User.GetLocalAuth(), "secrets returned with current user")
}
@@ -376,7 +376,7 @@ func TestUpdateUser(t *testing.T) {
created.User.SetLogins([]string{"alpaca"})
updated, err = env.UpdateUser(ctx, &userspb.UpdateUserRequest{User: created.User})
require.NoError(t, err, "failed updating user")
require.Empty(t, cmp.Diff(created.User, updated.User, cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
require.Empty(t, cmp.Diff(created.User, updated.User, cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
require.Equal(t, []string{"alpaca"}, updated.User.GetLogins(), "logins were not updated")
event = <-env.emitter.C()
@@ -424,7 +424,7 @@ func TestUpsertUser(t *testing.T) {
upserted.User.SetLogins([]string{"alpaca"})
updated, err := env.UpsertUser(ctx, &userspb.UpsertUserRequest{User: upserted.User})
require.NoError(t, err, "failed upserting user")
require.Empty(t, cmp.Diff(upserted.User, updated.User, cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
require.Empty(t, cmp.Diff(upserted.User, updated.User, cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
require.Equal(t, []string{"alpaca"}, updated.User.GetLogins(), "logins were not updated")
event = <-env.emitter.C()
@@ -478,7 +478,7 @@ func TestListUsers(t *testing.T) {
assert.NoError(t, err, "failed listing created user")
assert.Len(t, resp.Users, 1, "expected one user to be returned got %d", len(resp.Users))
assert.Empty(t, resp.NextPageToken, "expected next page token to be empty")
assert.Empty(t, cmp.Diff(created.User, resp.Users[0], cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"), cmpopts.IgnoreFields(types.UserSpecV2{}, "LocalAuth")))
assert.Empty(t, cmp.Diff(created.User, resp.Users[0], cmpopts.IgnoreFields(types.Metadata{}, "Revision"), cmpopts.IgnoreFields(types.UserSpecV2{}, "LocalAuth")))
assert.Nil(t, resp.Users[0].GetLocalAuth(), "user secrets were provided when not requested")
// Validate that requesting a users secrets returns them.
@@ -486,7 +486,7 @@ func TestListUsers(t *testing.T) {
assert.NoError(t, err, "failed listing created user")
assert.Len(t, resp.Users, 1, "expected one user to be returned got %d", len(resp.Users))
assert.Empty(t, resp.NextPageToken, "expected next page token to be empty")
assert.Empty(t, cmp.Diff(created.User, resp.Users[0], cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
assert.Empty(t, cmp.Diff(created.User, resp.Users[0], cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
assert.Empty(t, cmp.Diff(llama.GetLocalAuth(), resp.Users[0].GetLocalAuth()), "user secrets do not match")
// Create addition users to test pagination
@@ -595,7 +595,7 @@ func TestRBAC(t *testing.T) {
f: func(t *testing.T, service *usersv1.Service) {
user, err := service.GetUser(ctx, &userspb.GetUserRequest{CurrentUser: true})
assert.NoError(t, err, "expected RBAC to allow getting the current user")
assert.Empty(t, cmp.Diff(llama, user.User, cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
assert.Empty(t, cmp.Diff(llama, user.User, cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
},
checker: &fakeChecker{
rules: []types.Rule{
@@ -627,7 +627,7 @@ func TestRBAC(t *testing.T) {
f: func(t *testing.T, service *usersv1.Service) {
resp, err := service.GetUser(ctx, &userspb.GetUserRequest{Name: "llama"})
assert.NoError(t, err, "expected RBAC to allow getting user")
assert.Empty(t, cmp.Diff(llama, resp.User, cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
assert.Empty(t, cmp.Diff(llama, resp.User, cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
},
checker: &fakeChecker{
rules: []types.Rule{
@@ -667,7 +667,7 @@ func TestRBAC(t *testing.T) {
u.SetName("alpaca")
created, err := service.CreateUser(ctx, &userspb.CreateUserRequest{User: u})
assert.NoError(t, err, "expected RBAC to allow creating user")
assert.Empty(t, cmp.Diff(u, created.User, cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
assert.Empty(t, cmp.Diff(u, created.User, cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
},
checker: &fakeChecker{
rules: []types.Rule{
@@ -706,7 +706,7 @@ func TestRBAC(t *testing.T) {
u.SetLogins([]string{"alpaca"})
updated, err := service.UpdateUser(ctx, &userspb.UpdateUserRequest{User: u})
assert.NoError(t, err, "expected RBAC to allow updating user")
assert.Empty(t, cmp.Diff(u, updated.User, cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
assert.Empty(t, cmp.Diff(u, updated.User, cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
},
checker: &fakeChecker{
rules: []types.Rule{
@@ -784,7 +784,7 @@ func TestRBAC(t *testing.T) {
f: func(t *testing.T, service *usersv1.Service) {
upserted, err := service.UpsertUser(ctx, &userspb.UpsertUserRequest{User: llama.(*types.UserV2)})
assert.NoError(t, err, "expected RBAC to allow updating user")
assert.Empty(t, cmp.Diff(llama, upserted.User, cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
assert.Empty(t, cmp.Diff(llama, upserted.User, cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
},
checker: &fakeChecker{
rules: []types.Rule{
@@ -860,7 +860,7 @@ func TestRBAC(t *testing.T) {
resp, err := service.ListUsers(ctx, &userspb.ListUsersRequest{PageSize: 1})
assert.NoError(t, err, "expected RBAC to prevent deleting user")
require.Len(t, resp.Users, 1, "expected list to return a single user got %d", len(resp.Users))
assert.Empty(t, cmp.Diff(llama, resp.Users[0], cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
assert.Empty(t, cmp.Diff(llama, resp.Users[0], cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
},
checker: &fakeChecker{
rules: []types.Rule{
+1 -1
View File
@@ -1189,6 +1189,6 @@ func createUserAndRole(client *testClient, username string, allowedLogins []stri
func resourceDiff(res1, res2 types.Resource) string {
return cmp.Diff(res1, res2,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision", "Namespace"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision", "Namespace"),
cmpopts.EquateEmpty())
}
-6
View File
@@ -197,9 +197,6 @@ func StreamRange(ctx context.Context, bk Backend, startKey, endKey []byte, pageS
type Lease struct {
// Key is the resource identifier.
Key []byte
// ID is a lease ID, could be empty.
// Deprecated: use Revision instead
ID int64
// Revision is the last known version of the object.
Revision string
}
@@ -260,9 +257,6 @@ type Item struct {
Value []byte
// Expires is an optional record expiry time
Expires time.Time
// ID is a record ID, newer records have newer ids
// Deprecated: use Revision instead
ID int64
// Revision is the last known version of the object.
Revision string
}
+14 -13
View File
@@ -20,6 +20,7 @@ package backend
import (
"context"
"fmt"
"testing"
"time"
@@ -50,17 +51,17 @@ func TestWatcherSimple(t *testing.T) {
t.Fatalf("Timeout waiting for event.")
}
b.Emit(Event{Item: Item{Key: []byte{Separator}, ID: 1}})
b.Emit(Event{Item: Item{Key: []byte("/1")}})
select {
case e := <-w.Events():
require.Equal(t, int64(1), e.Item.ID)
require.Equal(t, []byte("/1"), e.Item.Key)
case <-time.After(100 * time.Millisecond):
t.Fatalf("Timeout waiting for event.")
}
b.Close()
b.Emit(Event{Item: Item{ID: 2}})
b.Emit(Event{Item: Item{Key: []byte("/2")}})
select {
case <-w.Done():
@@ -102,12 +103,12 @@ func TestWatcherCapacity(t *testing.T) {
// emit and then consume 10 events. this is much larger than our queue size,
// but should succeed since we consume within our grace period.
for i := 0; i < 10; i++ {
b.Emit(Event{Item: Item{Key: []byte{Separator}, ID: int64(i + 1)}})
b.Emit(Event{Item: Item{Key: []byte(fmt.Sprintf("/%d", i+1))}})
}
for i := 0; i < 10; i++ {
select {
case e := <-w.Events():
require.Equal(t, e.Item.ID, int64(i+1))
require.Equal(t, fmt.Sprintf("/%d", i+1), string(e.Item.Key))
default:
t.Fatalf("Expected events to be immediately available")
}
@@ -117,7 +118,7 @@ func TestWatcherCapacity(t *testing.T) {
clock.Advance(gracePeriod + time.Second)
// emit another event, which will cause buffer to reevaluate the grace period.
b.Emit(Event{Item: Item{Key: []byte{Separator}, ID: int64(11)}})
b.Emit(Event{Item: Item{Key: []byte("/11")}})
// ensure that buffer did not close watcher, since previously created backlog
// was drained within grace period.
@@ -129,13 +130,13 @@ func TestWatcherCapacity(t *testing.T) {
// create backlog again, and this time advance past grace period without draining it.
for i := 0; i < 10; i++ {
b.Emit(Event{Item: Item{Key: []byte{Separator}, ID: int64(i + 12)}})
b.Emit(Event{Item: Item{Key: []byte(fmt.Sprintf("/%d", i+12))}})
}
clock.Advance(gracePeriod + time.Second)
// emit another event, which will cause buffer to realize that watcher is past
// its grace period.
b.Emit(Event{Item: Item{Key: []byte{Separator}, ID: int64(22)}})
b.Emit(Event{Item: Item{Key: []byte("/22")}})
select {
case <-w.Done():
@@ -223,11 +224,11 @@ func TestWatcherMulti(t *testing.T) {
t.Fatalf("Timeout waiting for event.")
}
b.Emit(Event{Item: Item{Key: []byte("/a/b/c"), ID: 1}})
b.Emit(Event{Item: Item{Key: []byte("/a/b/c")}})
select {
case e := <-w.Events():
require.Equal(t, int64(1), e.Item.ID)
require.Equal(t, []byte("/a/b/c"), e.Item.Key)
case <-time.After(100 * time.Millisecond):
t.Fatalf("Timeout waiting for event.")
}
@@ -255,7 +256,7 @@ func TestWatcherReset(t *testing.T) {
t.Fatalf("Timeout waiting for event.")
}
b.Emit(Event{Item: Item{Key: []byte{Separator}, ID: 1}})
b.Emit(Event{Item: Item{Key: []byte("/1")}})
b.Clear()
// make sure watcher has been closed
@@ -276,11 +277,11 @@ func TestWatcherReset(t *testing.T) {
t.Fatalf("Timeout waiting for event.")
}
b.Emit(Event{Item: Item{Key: []byte{Separator}, ID: 2}})
b.Emit(Event{Item: Item{Key: []byte("/2")}})
select {
case e := <-w2.Events():
require.Equal(t, int64(2), e.Item.ID)
require.Equal(t, []byte("/2"), e.Item.Key)
case <-time.After(100 * time.Millisecond):
t.Fatalf("Timeout waiting for event.")
}
-1
View File
@@ -119,7 +119,6 @@ func (b *Backend) AtomicWrite(ctx context.Context, condacts []backend.Conditiona
FullPath: fullPath,
Value: ca.Action.Item.Value,
Timestamp: time.Now().UTC().Unix(),
ID: time.Now().UTC().UnixNano(),
Revision: revision,
}
if !ca.Action.Item.Expires.IsZero() {
-5
View File
@@ -168,7 +168,6 @@ type record struct {
Value []byte
Timestamp int64
Expires *int64 `json:"Expires,omitempty"`
ID int64
Revision string
}
@@ -428,7 +427,6 @@ func (b *Backend) GetRange(ctx context.Context, startKey []byte, endKey []byte,
values[i] = backend.Item{
Key: trimPrefix(r.FullPath),
Value: r.Value,
ID: r.ID,
Revision: r.Revision,
}
if r.Expires != nil {
@@ -531,7 +529,6 @@ func (b *Backend) Get(ctx context.Context, key []byte) (*backend.Item, error) {
item := &backend.Item{
Key: trimPrefix(r.FullPath),
Value: r.Value,
ID: r.ID,
Revision: r.Revision,
}
if r.Expires != nil {
@@ -564,7 +561,6 @@ func (b *Backend) CompareAndSwap(ctx context.Context, expected backend.Item, rep
FullPath: prependPrefix(replaceWith.Key),
Value: replaceWith.Value,
Timestamp: time.Now().UTC().Unix(),
ID: time.Now().UTC().UnixNano(),
Revision: replaceWith.Revision,
}
if !replaceWith.Expires.IsZero() {
@@ -939,7 +935,6 @@ func (b *Backend) create(ctx context.Context, item backend.Item, mode int) (stri
FullPath: prependPrefix(item.Key),
Value: item.Value,
Timestamp: time.Now().UTC().Unix(),
ID: time.Now().UTC().UnixNano(),
Revision: backend.CreateRevision(),
}
if !item.Expires.IsZero() {
-1
View File
@@ -324,7 +324,6 @@ func toEvent(rec *dynamodbstreams.Record) (*backend.Event, error) {
Key: trimPrefix(r.FullPath),
Value: r.Value,
Expires: expires,
ID: r.ID,
Revision: r.Revision,
},
}, nil
-4
View File
@@ -678,7 +678,6 @@ func (b *EtcdBackend) GetRange(ctx context.Context, startKey, endKey []byte, lim
items = append(items, backend.Item{
Key: b.trimPrefix(kv.Key),
Value: value,
ID: kv.ModRevision,
Revision: toBackendRevision(kv.ModRevision),
})
}
@@ -895,7 +894,6 @@ func (b *EtcdBackend) Get(ctx context.Context, key []byte) (*backend.Item, error
return &backend.Item{
Key: key,
Value: value,
ID: kv.ModRevision,
Revision: toBackendRevision(kv.ModRevision),
}, nil
}
@@ -984,7 +982,6 @@ func (b *EtcdBackend) setupLease(ctx context.Context, item backend.Item, lease *
return trace.Wrap(err)
}
*opts = []clientv3.OpOption{clientv3.WithLease(leaseID)}
lease.ID = int64(leaseID)
lease.Key = item.Key
lease.Revision = item.Revision
return nil
@@ -1014,7 +1011,6 @@ func (b *EtcdBackend) fromEvent(ctx context.Context, e clientv3.Event) (*backend
Type: fromType(e.Type),
Item: backend.Item{
Key: b.trimPrefix(e.Kv.Key),
ID: e.Kv.ModRevision,
Revision: toBackendRevision(e.Kv.ModRevision),
},
}
+11 -6
View File
@@ -217,15 +217,20 @@ func TestLeaseBucketing(t *testing.T) {
require.NoError(t, err)
defer bk.Close()
leases := make(map[int64]struct{})
buckets := make(map[int64]struct{})
for i := 0; i < count; i++ {
lease, err := bk.Put(ctx, backend.Item{
Key: backend.Key(pfx, fmt.Sprintf("%d", i)),
key := backend.Key(pfx, fmt.Sprintf("%d", i))
_, err := bk.Put(ctx, backend.Item{
Key: key,
Value: []byte(fmt.Sprintf("val-%d", i)),
Expires: time.Now().Add(time.Minute),
})
require.NoError(t, err)
leases[lease.ID] = struct{}{}
item, err := bk.Get(ctx, key)
require.NoError(t, err)
buckets[item.Expires.Unix()] = struct{}{}
time.Sleep(time.Millisecond * 200)
}
@@ -237,8 +242,8 @@ func TestLeaseBucketing(t *testing.T) {
// ensure that we averaged more than 1 item per lease, but
// also spanned more than one bucket.
require.NotEmpty(t, leases)
require.Less(t, len(leases), count/2)
require.NotEmpty(t, buckets)
require.Less(t, len(buckets), count/2)
}
func etcdTestEnabled() bool {
-14
View File
@@ -130,7 +130,6 @@ type record struct {
Key []byte `firestore:"key,omitempty"`
Timestamp int64 `firestore:"timestamp,omitempty"`
Expires int64 `firestore:"expires,omitempty"`
ID int64 `firestore:"id,omitempty"`
Value []byte `firestore:"value,omitempty"`
RevisionV2 string `firestore:"revision,omitempty"`
RevisionV1 string `firestore:"-"`
@@ -141,7 +140,6 @@ func (r *record) updates() []firestore.Update {
{Path: keyDocProperty, Value: r.Key},
{Path: timestampDocProperty, Value: r.Timestamp},
{Path: expiresDocProperty, Value: r.Expires},
{Path: idDocProperty, Value: r.ID},
{Path: valueDocProperty, Value: r.Value},
{Path: revisionDocProperty, Value: r.RevisionV2},
}
@@ -159,7 +157,6 @@ type legacyRecord struct {
Key string `firestore:"key,omitempty"`
Timestamp int64 `firestore:"timestamp,omitempty"`
Expires int64 `firestore:"expires,omitempty"`
ID int64 `firestore:"id,omitempty"`
Value string `firestore:"value,omitempty"`
}
@@ -168,7 +165,6 @@ func newRecord(from backend.Item, clock clockwork.Clock) record {
Key: from.Key,
Value: from.Value,
Timestamp: clock.Now().UTC().Unix(),
ID: id(clock.Now()),
}
if isRevisionV2(from.Revision) {
@@ -198,7 +194,6 @@ func newRecordFromDoc(doc *firestore.DocumentSnapshot) (*record, error) {
Value: []byte(rl.Value),
Timestamp: rl.Timestamp,
Expires: rl.Expires,
ID: rl.ID,
}
}
if r.RevisionV2 == "" {
@@ -220,7 +215,6 @@ func (r *record) backendItem() backend.Item {
bi := backend.Item{
Key: r.Key,
Value: r.Value,
ID: r.ID,
}
if r.RevisionV2 != "" {
@@ -246,8 +240,6 @@ const (
expiresDocProperty = "expires"
// timestampDocProperty is used internally to query for records and matches the timestamp in the record struct tag
timestampDocProperty = "timestamp"
// idDocProperty references the record's internal ID
idDocProperty = "id"
// valueDocProperty references the value of the record
valueDocProperty = "value"
// revisionDocProperty references the record's revision
@@ -810,7 +802,6 @@ func (b *Backend) KeepAlive(ctx context.Context, lease backend.Lease, expires ti
updates := []firestore.Update{
{Path: expiresDocProperty, Value: expires.UTC().Unix()},
{Path: timestampDocProperty, Value: b.clock.Now().UTC().Unix()},
{Path: idDocProperty, Value: id(b.clock.Now())},
{Path: revisionDocProperty, Value: createRevisionV2()},
}
_, err = docSnap.Ref.Update(ctx, updates)
@@ -1152,11 +1143,6 @@ func waitOnIndexCreation(ctx context.Context, l *log.Entry, task indexTask) erro
return nil
}
// id returns a new record ID base on the specified timestamp
func id(now time.Time) int64 {
return now.UTC().UnixNano()
}
// revisionV2Prefix uniquely identifies version 2 firestore revision values. Older firestore documents
// use the update time as their revision. Newer documents use a random string value as their revision.
const revisionV2Prefix = "f2:"
@@ -179,7 +179,6 @@ func TestReadLegacyRecord(t *testing.T) {
Key: []byte("legacy-record"),
Value: []byte("foo"),
Expires: uut.clock.Now().Add(time.Minute).Round(time.Second).UTC(),
ID: uut.clock.Now().UTC().UnixNano(),
}
// Write using legacy record format, emulating data written by an older
@@ -190,7 +189,6 @@ func TestReadLegacyRecord(t *testing.T) {
Value: string(item.Value),
Expires: item.Expires.UTC().Unix(),
Timestamp: uut.clock.Now().UTC().Unix(),
ID: item.ID,
}
_, err := uut.svc.Collection(uut.CollectionName).Doc(uut.keyToDocumentID(item.Key)).Set(ctx, rl)
require.NoError(t, err)
@@ -200,7 +198,6 @@ func TestReadLegacyRecord(t *testing.T) {
require.NoError(t, err)
require.Equal(t, item.Key, got.Key)
require.Equal(t, item.Value, got.Value)
require.Equal(t, item.ID, got.ID)
require.Equal(t, item.Expires, got.Expires)
// Read the data back using a range query too.
@@ -211,7 +208,6 @@ func TestReadLegacyRecord(t *testing.T) {
got = &gotRange.Items[0]
require.Equal(t, item.Key, got.Key)
require.Equal(t, item.Value, got.Value)
require.Equal(t, item.ID, got.ID)
require.Equal(t, item.Expires, got.Expires)
}
+4 -4
View File
@@ -611,7 +611,7 @@ func (l *Backend) Get(ctx context.Context, key []byte) (*backend.Item, error) {
// getInTransaction returns an item, works in transaction
func (l *Backend) getInTransaction(ctx context.Context, key []byte, tx *sql.Tx, item *backend.Item) error {
q, err := tx.PrepareContext(ctx,
"SELECT key, value, expires, modified, revision FROM kv WHERE key = ? AND (expires IS NULL OR expires > ?) LIMIT 1")
"SELECT key, value, expires, revision FROM kv WHERE key = ? AND (expires IS NULL OR expires > ?) LIMIT 1")
if err != nil {
return trace.Wrap(err)
}
@@ -619,7 +619,7 @@ func (l *Backend) getInTransaction(ctx context.Context, key []byte, tx *sql.Tx,
row := q.QueryRowContext(ctx, string(key), l.clock.Now().UTC())
var expires sql.NullTime
if err := row.Scan(&item.Key, &item.Value, &expires, &item.ID, &item.Revision); err != nil {
if err := row.Scan(&item.Key, &item.Value, &expires, &item.Revision); err != nil {
if errors.Is(err, sql.ErrNoRows) {
return trace.NotFound("key %v is not found", string(key))
}
@@ -644,7 +644,7 @@ func (l *Backend) GetRange(ctx context.Context, startKey []byte, endKey []byte,
var result backend.GetResult
err := l.inTransaction(ctx, func(tx *sql.Tx) error {
q, err := tx.PrepareContext(ctx,
"SELECT key, value, expires, modified, revision FROM kv WHERE (key >= ? and key <= ?) AND (expires is NULL or expires > ?) ORDER BY key LIMIT ?")
"SELECT key, value, expires, revision FROM kv WHERE (key >= ? and key <= ?) AND (expires is NULL or expires > ?) ORDER BY key LIMIT ?")
if err != nil {
return trace.Wrap(err)
}
@@ -659,7 +659,7 @@ func (l *Backend) GetRange(ctx context.Context, startKey []byte, endKey []byte,
for rows.Next() {
var i backend.Item
var expires sql.NullTime
if err := rows.Scan(&i.Key, &i.Value, &expires, &i.ID, &i.Revision); err != nil {
if err := rows.Scan(&i.Key, &i.Value, &expires, &i.Revision); err != nil {
return trace.Wrap(err)
}
i.Expires = expires.Time
+2 -2
View File
@@ -157,7 +157,7 @@ func (l *Backend) pollEvents(rowid int64) (int64, error) {
var lastID int64
err := l.inTransaction(l.ctx, func(tx *sql.Tx) error {
q, err := tx.PrepareContext(l.ctx,
"SELECT id, type, kv_key, kv_value, kv_modified, kv_expires, kv_revision FROM events WHERE id > ? ORDER BY id LIMIT ?")
"SELECT id, type, kv_key, kv_value, kv_expires, kv_revision FROM events WHERE id > ? ORDER BY id LIMIT ?")
if err != nil {
return trace.Wrap(err)
}
@@ -174,7 +174,7 @@ func (l *Backend) pollEvents(rowid int64) (int64, error) {
for rows.Next() {
var event backend.Event
var expires sql.NullTime
if err := rows.Scan(&lastID, &event.Type, &event.Item.Key, &event.Item.Value, &event.Item.ID, &expires, &event.Item.Revision); err != nil {
if err := rows.Scan(&lastID, &event.Type, &event.Item.Key, &event.Item.Value, &expires, &event.Item.Revision); err != nil {
return trace.Wrap(err)
}
if expires.Valid {
-1
View File
@@ -76,7 +76,6 @@ func (m *Memory) AtomicWrite(ctx context.Context, condacts []backend.Conditional
Item: ca.Action.Item,
}
event.Item.Key = ca.Key
event.Item.ID = m.generateID()
event.Item.Revision = revision
events = append(events, event)
case backend.KindDelete:
+1 -15
View File
@@ -22,7 +22,6 @@ import (
"bytes"
"context"
"sync"
"sync/atomic"
"time"
"github.com/google/btree"
@@ -63,7 +62,7 @@ type Config struct {
// BufferSize sets up event buffer size
BufferSize int
// Mirror mode is used when the memory backend is used for caching. In mirror
// mode, record IDs for Put requests are re-used (instead of
// mode, revisions for Put requests are re-used (instead of
// generating fresh ones) and expiration is turned off.
Mirror bool
}
@@ -117,10 +116,6 @@ func New(cfg Config) (*Memory, error) {
// Memory is a memory B-Tree based backend
type Memory struct {
// nextID is a next record ID
// intentionally placed first to ensure 64-bit alignment
nextID int64
*sync.Mutex
*log.Entry
Config
@@ -210,7 +205,6 @@ func (m *Memory) Update(ctx context.Context, i backend.Item) (*backend.Lease, er
return nil, trace.NotFound("key %q is not found", string(i.Key))
}
if !m.Mirror {
i.ID = m.generateID()
i.Revision = backend.CreateRevision()
}
event := backend.Event{
@@ -234,7 +228,6 @@ func (m *Memory) Put(ctx context.Context, i backend.Item) (*backend.Lease, error
defer m.Unlock()
m.removeExpired()
if !m.Mirror {
i.ID = m.generateID()
i.Revision = backend.CreateRevision()
}
event := backend.Event{
@@ -336,8 +329,6 @@ func (m *Memory) KeepAlive(ctx context.Context, lease backend.Lease, expires tim
item := i.Item
item.Expires = expires
if !m.Mirror {
// ID is updated on keep alive for consistency with other backends
item.ID = m.generateID()
item.Revision = backend.CreateRevision()
}
event := backend.Event{
@@ -429,7 +420,6 @@ func (m *Memory) ConditionalUpdate(ctx context.Context, i backend.Item) (*backen
}
if !m.Mirror {
i.ID = m.generateID()
i.Revision = backend.CreateRevision()
}
event := backend.Event{
@@ -451,10 +441,6 @@ func (m *Memory) NewWatcher(ctx context.Context, watch backend.Watch) (backend.W
return m.buf.NewWatcher(ctx, watch)
}
func (m *Memory) generateID() int64 {
return atomic.AddInt64(&m.nextID, 1)
}
func (m *Memory) getRange(ctx context.Context, startKey, endKey []byte, limit int) backend.GetResult {
var res backend.GetResult
m.tree.AscendRange(&btreeItem{Item: backend.Item{Key: startKey}}, &btreeItem{Item: backend.Item{Key: endKey}}, func(item *btreeItem) bool {
-2
View File
@@ -437,7 +437,6 @@ func (b *Backend) Get(ctx context.Context, key []byte) (*backend.Item, error) {
Key: key,
Value: value,
Expires: expires.UTC(),
ID: idFromRevision(revision),
Revision: revisionToString(revision),
}
return nil
@@ -491,7 +490,6 @@ func (b *Backend) GetRange(ctx context.Context, startKey []byte, endKey []byte,
Key: key,
Value: value,
Expires: expires.UTC(),
ID: idFromRevision(revision),
Revision: revisionToString(revision),
}, nil
})
-10
View File
@@ -19,8 +19,6 @@
package pgbk
import (
"encoding/binary"
"github.com/google/uuid"
)
@@ -48,14 +46,6 @@ func revisionFromString(s string) (r revision, ok bool) {
return u, true
}
// idFromRevision derives a value usable as a [backend.Item]'s ID from a
// revision UUID.
func idFromRevision(revision revision) int64 {
u := binary.LittleEndian.Uint64(revision[:])
u &= 0x7fff_ffff_ffff_ffff
return int64(u)
}
// nonNil replaces a nil slice with an empty, non-nil one.
func nonNil(b []byte) []byte {
if b == nil {
-3
View File
@@ -142,7 +142,6 @@ func (w *wal2jsonMessage) Events() ([]backend.Event, error) {
Key: key,
Value: value,
Expires: expires.UTC(),
ID: idFromRevision(revision),
Revision: revisionToString(revision),
},
}}, nil
@@ -205,7 +204,6 @@ func (w *wal2jsonMessage) Events() ([]backend.Event, error) {
Key: key,
Value: value,
Expires: expires.UTC(),
ID: idFromRevision(revision),
Revision: revisionToString(revision),
},
}}, nil
@@ -217,7 +215,6 @@ func (w *wal2jsonMessage) Events() ([]backend.Event, error) {
Key: key,
Value: value,
Expires: expires.UTC(),
ID: idFromRevision(revision),
Revision: revisionToString(revision),
},
}}, nil
-3
View File
@@ -159,7 +159,6 @@ func TestMessage(t *testing.T) {
Item: backend.Item{
Key: []byte("foo"),
Value: []byte(""),
ID: idFromRevision(rev),
Revision: revisionToString(rev),
},
}))
@@ -184,7 +183,6 @@ func TestMessage(t *testing.T) {
Item: backend.Item{
Key: []byte("foo"),
Value: []byte("foo2"),
ID: idFromRevision(rev),
Revision: revisionToString(rev),
},
}))
@@ -220,7 +218,6 @@ func TestMessage(t *testing.T) {
Key: []byte("foo2"),
Value: []byte("foo2"),
Expires: time.Date(2023, 9, 5, 15, 57, 1, 340426000, time.UTC),
ID: idFromRevision(rev),
Revision: revisionToString(rev),
},
}))
-1
View File
@@ -447,7 +447,6 @@ func (s *Reporter) KeepAlive(ctx context.Context, lease Lease, expires time.Time
"backend/KeepAlive",
oteltrace.WithAttributes(
attribute.String("revision", lease.Revision),
attribute.Int64("lease", lease.ID),
attribute.String("key", string(lease.Key)),
),
)
+4 -4
View File
@@ -1051,9 +1051,9 @@ func testMirror(t *testing.T, newBackend Constructor) {
item, err = uut.Get(ctx, item.Key)
require.NoError(t, err)
// Save the original ID, later in this test after an update, the ID should
// Save the original revision, later in this test after an update, the revision should
// not have changed in mirror mode.
originalID := item.ID
originalRevision := item.Revision
// Make sure a PUT event is emitted.
e := requireEvent(t, watcher, types.OpPut, item.Key, eventTimeout)
@@ -1078,10 +1078,10 @@ func testMirror(t *testing.T, newBackend Constructor) {
})
require.NoError(t, err)
// Get update item and make sure that the ID has not changed.
// Get update item and make sure that the revision has not changed.
item, err = uut.Get(ctx, prefix("a"))
require.NoError(t, err)
require.Equal(t, originalID, item.ID)
require.Equal(t, originalRevision, item.Revision)
// Add item to backend that is already expired.
item2 := &backend.Item{
+20 -25
View File
@@ -414,7 +414,7 @@ func TestCA(t *testing.T) {
out, err := p.cache.GetCertAuthority(ctx, ca.GetID(), true)
require.NoError(t, err)
require.Empty(t, cmp.Diff(ca, out, cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
require.Empty(t, cmp.Diff(ca, out, cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
err = p.trustS.DeleteCertAuthority(ctx, ca.GetID())
require.NoError(t, err)
@@ -1157,7 +1157,7 @@ func initStrategy(t *testing.T) {
out, err := p.cache.GetCertAuthority(ctx, ca.GetID(), false)
require.NoError(t, err)
require.Empty(t, cmp.Diff(normalizeCA(ca), normalizeCA(out), cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
require.Empty(t, cmp.Diff(normalizeCA(ca), normalizeCA(out), cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
// fail again, make sure last recent data is still served
// on errors
@@ -1171,8 +1171,7 @@ func initStrategy(t *testing.T) {
// backend is out, but old value is available
out2, err := p.cache.GetCertAuthority(ctx, ca.GetID(), false)
require.NoError(t, err)
require.Equal(t, out.GetResourceID(), out2.GetResourceID())
require.Empty(t, cmp.Diff(normalizeCA(ca), normalizeCA(out), cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
require.Empty(t, cmp.Diff(normalizeCA(ca), normalizeCA(out2), cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
// add modification and expect the resource to recover
ca.SetRoleMap(types.RoleMap{types.RoleMapping{Remote: "test", Local: []string{"local-test"}}})
@@ -1189,7 +1188,7 @@ func initStrategy(t *testing.T) {
// new value is available now
out, err = p.cache.GetCertAuthority(ctx, ca.GetID(), false)
require.NoError(t, err)
require.Empty(t, cmp.Diff(normalizeCA(ca), normalizeCA(out), cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
require.Empty(t, cmp.Diff(normalizeCA(ca), normalizeCA(out), cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
}
// TestRecovery tests error recovery scenario
@@ -1233,7 +1232,7 @@ func TestRecovery(t *testing.T) {
out, err := p.cache.GetCertAuthority(context.Background(), ca2.GetID(), false)
require.NoError(t, err)
types.RemoveCASecrets(ca2)
require.Empty(t, cmp.Diff(ca2, out, cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
require.Empty(t, cmp.Diff(ca2, out, cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
}
// TestTokens tests static and dynamic tokens
@@ -1267,7 +1266,7 @@ func TestTokens(t *testing.T) {
out, err := p.cache.GetStaticTokens()
require.NoError(t, err)
require.Empty(t, cmp.Diff(staticTokens, out, cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
require.Empty(t, cmp.Diff(staticTokens, out, cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
expires := time.Now().Add(10 * time.Hour).Truncate(time.Second).UTC()
token, err := types.NewProvisionToken("token", types.SystemRoles{types.RoleAuth, types.RoleNode}, expires)
@@ -1285,7 +1284,7 @@ func TestTokens(t *testing.T) {
tout, err := p.cache.GetToken(ctx, token.GetName())
require.NoError(t, err)
require.Empty(t, cmp.Diff(token, tout, cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
require.Empty(t, cmp.Diff(token, tout, cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
err = p.provisionerS.DeleteToken(ctx, token.GetName())
require.NoError(t, err)
@@ -1327,7 +1326,7 @@ func TestAuthPreference(t *testing.T) {
outAuthPref, err := p.cache.GetAuthPreference(ctx)
require.NoError(t, err)
require.Empty(t, cmp.Diff(outAuthPref, authPref, cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
require.Empty(t, cmp.Diff(outAuthPref, authPref, cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
}
func TestClusterNetworkingConfig(t *testing.T) {
@@ -1356,7 +1355,7 @@ func TestClusterNetworkingConfig(t *testing.T) {
outNetConfig, err := p.cache.GetClusterNetworkingConfig(ctx)
require.NoError(t, err)
require.Empty(t, cmp.Diff(outNetConfig, netConfig, cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
require.Empty(t, cmp.Diff(outNetConfig, netConfig, cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
}
func TestSessionRecordingConfig(t *testing.T) {
@@ -1385,7 +1384,7 @@ func TestSessionRecordingConfig(t *testing.T) {
outRecConfig, err := p.cache.GetSessionRecordingConfig(ctx)
require.NoError(t, err)
require.Empty(t, cmp.Diff(outRecConfig, recConfig, cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
require.Empty(t, cmp.Diff(outRecConfig, recConfig, cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
}
func TestClusterAuditConfig(t *testing.T) {
@@ -1413,7 +1412,7 @@ func TestClusterAuditConfig(t *testing.T) {
outAuditConfig, err := p.cache.GetClusterAuditConfig(ctx)
require.NoError(t, err)
require.Empty(t, cmp.Diff(outAuditConfig, auditConfig, cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
require.Empty(t, cmp.Diff(outAuditConfig, auditConfig, cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
}
func TestClusterName(t *testing.T) {
@@ -1440,7 +1439,7 @@ func TestClusterName(t *testing.T) {
outName, err := p.cache.GetClusterName()
require.NoError(t, err)
require.Empty(t, cmp.Diff(outName, clusterName, cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
require.Empty(t, cmp.Diff(outName, clusterName, cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
}
// TestNamespaces tests caching of namespaces
@@ -1468,7 +1467,7 @@ func TestNamespaces(t *testing.T) {
out, err := p.cache.GetNamespace(ns.GetName())
require.NoError(t, err)
require.Empty(t, cmp.Diff(ns, out, cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
require.Empty(t, cmp.Diff(ns, out, cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
// update namespace metadata
ns.Metadata.Labels = map[string]string{"a": "b"}
@@ -1488,7 +1487,7 @@ func TestNamespaces(t *testing.T) {
out, err = p.cache.GetNamespace(ns.GetName())
require.NoError(t, err)
require.Empty(t, cmp.Diff(ns, out, cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision")))
require.Empty(t, cmp.Diff(ns, out, cmpopts.IgnoreFields(types.Metadata{}, "Revision")))
err = p.presenceS.DeleteNamespace(ns.GetName())
require.NoError(t, err)
@@ -2593,8 +2592,8 @@ func testResources[T types.Resource](t *testing.T, p *testPack, funcs testFuncs[
require.NoError(t, err)
cmpOpts := []cmp.Option{
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(header.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
cmpopts.IgnoreFields(header.Metadata{}, "Revision"),
}
// Check that the resource is now in the backend.
@@ -2668,7 +2667,7 @@ func testResources153[T types.Resource153](t *testing.T, p *testPack, funcs test
require.NoError(t, err)
cmpOpts := []cmp.Option{
protocmp.IgnoreFields(&headerv1.Metadata{}, "id", "revision"),
protocmp.IgnoreFields(&headerv1.Metadata{}, "revision"),
protocmp.Transform(),
}
@@ -3281,9 +3280,8 @@ func TestInvalidDatabases(t *testing.T) {
t.Parallel()
ctx := context.Background()
generateInvalidDB := func(t *testing.T, resourceID int64, name string) types.Database {
generateInvalidDB := func(t *testing.T, name string) types.Database {
db := &types.DatabaseV3{Metadata: types.Metadata{
ID: resourceID,
Name: name,
}, Spec: types.DatabaseSpecV3{
Protocol: "invalid-protocol",
@@ -3300,14 +3298,13 @@ func TestInvalidDatabases(t *testing.T) {
}{
"CreateDatabase": {
storeFunc: func(t *testing.T, b *backend.Wrapper, _ *Cache) {
db := generateInvalidDB(t, 0, "invalid-db")
db := generateInvalidDB(t, "invalid-db")
value, err := services.MarshalDatabase(db)
require.NoError(t, err)
_, err = b.Create(ctx, backend.Item{
Key: backend.Key("db", db.GetName()),
Value: value,
Expires: db.Expiry(),
ID: db.GetResourceID(),
})
require.NoError(t, err)
},
@@ -3330,7 +3327,6 @@ func TestInvalidDatabases(t *testing.T) {
Key: backend.Key("db", validDB.GetName()),
Value: marshalledDB,
Expires: validDB.Expiry(),
ID: validDB.GetResourceID(),
})
require.NoError(t, err)
@@ -3344,14 +3340,13 @@ func TestInvalidDatabases(t *testing.T) {
cacheDB, err := c.GetDatabase(ctx, dbName)
require.NoError(t, err)
invalidDB := generateInvalidDB(t, cacheDB.GetResourceID(), cacheDB.GetName())
invalidDB := generateInvalidDB(t, cacheDB.GetName())
value, err := services.MarshalDatabase(invalidDB)
require.NoError(t, err)
_, err = b.Update(ctx, backend.Item{
Key: backend.Key("db", cacheDB.GetName()),
Value: value,
Expires: invalidDB.Expiry(),
ID: cacheDB.GetResourceID(),
})
require.NoError(t, err)
},
+8 -8
View File
@@ -73,7 +73,7 @@ func TestWatcher(t *testing.T) {
case a := <-reconcileCh:
sort.Sort(a)
require.Empty(t, cmp.Diff(types.KubeClusters{kube0}, a,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
case <-time.After(time.Second):
t.Fatal("Didn't receive reconcile event after 1s.")
@@ -90,7 +90,7 @@ func TestWatcher(t *testing.T) {
case a := <-reconcileCh:
sort.Sort(a)
require.Empty(t, cmp.Diff(types.KubeClusters{kube0, kube1}, a,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
case <-time.After(time.Second):
t.Fatal("Didn't receive reconcile event after 1s.")
@@ -107,7 +107,7 @@ func TestWatcher(t *testing.T) {
case a := <-reconcileCh:
sort.Sort(a)
require.Empty(t, cmp.Diff(types.KubeClusters{kube0, kube1}, a,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
case <-time.After(time.Second):
t.Fatal("Didn't receive reconcile event after 1s.")
@@ -124,7 +124,7 @@ func TestWatcher(t *testing.T) {
case a := <-reconcileCh:
sort.Sort(a)
require.Empty(t, cmp.Diff(types.KubeClusters{kube0, kube1}, a,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
case <-time.After(time.Second):
t.Fatal("Didn't receive reconcile event after 1s.")
@@ -140,7 +140,7 @@ func TestWatcher(t *testing.T) {
case a := <-reconcileCh:
sort.Sort(a)
require.Empty(t, cmp.Diff(types.KubeClusters{kube0, kube1, kube2}, a,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
case <-time.After(time.Second):
t.Fatal("Didn't receive reconcile event after 1s.")
@@ -157,7 +157,7 @@ func TestWatcher(t *testing.T) {
case a := <-reconcileCh:
sort.Sort(a)
require.Empty(t, cmp.Diff(types.KubeClusters{kube0, kube1, kube2}, a,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
// make sure credentials were updated as well.
require.Equal(t, strings.TrimPrefix(kubeMock.URL, "https://"), testCtx.KubeServer.fwd.clusterDetails["kube2"].kubeCreds.getTargetAddr())
@@ -175,7 +175,7 @@ func TestWatcher(t *testing.T) {
case a := <-reconcileCh:
sort.Sort(a)
require.Empty(t, cmp.Diff(types.KubeClusters{kube0, kube2}, a,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
case <-time.After(time.Second):
t.Fatal("Didn't receive reconcile event after 1s.")
@@ -189,7 +189,7 @@ func TestWatcher(t *testing.T) {
select {
case a := <-reconcileCh:
require.Empty(t, cmp.Diff(types.KubeClusters{kube0}, a,
cmpopts.IgnoreFields(types.Metadata{}, "ID", "Revision"),
cmpopts.IgnoreFields(types.Metadata{}, "Revision"),
))
case <-time.After(time.Second):
t.Fatal("Didn't receive reconcile event after 1s.")
+3 -15
View File
@@ -90,9 +90,8 @@ func MarshalAccessList(accessList *accesslist.AccessList, opts ...MarshalOption)
return nil, trace.Wrap(err)
}
if !cfg.PreserveResourceID {
if !cfg.PreserveRevision {
copy := *accessList
copy.SetResourceID(0)
copy.SetRevision("")
accessList = &copy
}
@@ -115,9 +114,6 @@ func UnmarshalAccessList(data []byte, opts ...MarshalOption) (*accesslist.Access
if err := accessList.CheckAndSetDefaults(); err != nil {
return nil, trace.Wrap(err)
}
if cfg.ID != 0 {
accessList.SetResourceID(cfg.ID)
}
if cfg.Revision != "" {
accessList.SetRevision(cfg.Revision)
}
@@ -189,9 +185,8 @@ func MarshalAccessListMember(member *accesslist.AccessListMember, opts ...Marsha
return nil, trace.Wrap(err)
}
if !cfg.PreserveResourceID {
if !cfg.PreserveRevision {
copy := *member
copy.SetResourceID(0)
copy.SetRevision("")
member = &copy
}
@@ -214,9 +209,6 @@ func UnmarshalAccessListMember(data []byte, opts ...MarshalOption) (*accesslist.
if err := member.CheckAndSetDefaults(); err != nil {
return nil, trace.Wrap(err)
}
if cfg.ID != 0 {
member.SetResourceID(cfg.ID)
}
if cfg.Revision != "" {
member.SetRevision(cfg.Revision)
}
@@ -388,9 +380,8 @@ func MarshalAccessListReview(review *accesslist.Review, opts ...MarshalOption) (
return nil, trace.Wrap(err)
}
if !cfg.PreserveResourceID {
if !cfg.PreserveRevision {
copy := *review
copy.SetResourceID(0)
copy.SetRevision("")
review = &copy
}
@@ -413,9 +404,6 @@ func UnmarshalAccessListReview(data []byte, opts ...MarshalOption) (*accesslist.
if err := review.CheckAndSetDefaults(); err != nil {
return nil, trace.Wrap(err)
}
if cfg.ID != 0 {
review.SetResourceID(cfg.ID)
}
if cfg.Revision != "" {
review.SetRevision(cfg.Revision)
}
+1 -4
View File
@@ -1832,9 +1832,6 @@ func UnmarshalAccessRequest(data []byte, opts ...MarshalOption) (*types.AccessRe
if err := ValidateAccessRequest(&req); err != nil {
return nil, trace.Wrap(err)
}
if cfg.ID != 0 {
req.SetResourceID(cfg.ID)
}
if cfg.Revision != "" {
req.SetRevision(cfg.Revision)
}
@@ -1857,7 +1854,7 @@ func MarshalAccessRequest(accessRequest types.AccessRequest, opts ...MarshalOpti
switch accessRequest := accessRequest.(type) {
case *types.AccessRequestV3:
return utils.FastMarshal(maybeResetProtoResourceID(cfg.PreserveResourceID, accessRequest))
return utils.FastMarshal(maybeResetProtoRevision(cfg.PreserveRevision, accessRequest))
default:
return nil, trace.BadParameter("unrecognized access request type: %T", accessRequest)
}

Some files were not shown because too many files have changed in this diff Show More