mirror of
https://github.com/gravitational/teleport.git
synced 2026-10-12 02:15:01 +00:00
remote Metadata.ID and Lease.ID fields (#41732)
This commit is contained in:
@@ -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 (
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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"},
|
||||
},
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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() }
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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",
|
||||
})
|
||||
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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",
|
||||
},
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
@@ -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"),
|
||||
}
|
||||
|
||||
|
||||
@@ -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{
|
||||
|
||||
@@ -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()
|
||||
}),
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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")))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
@@ -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.
|
||||
|
||||
@@ -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")),
|
||||
)
|
||||
}
|
||||
})
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"),
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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")))
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
@@ -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++
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}),
|
||||
|
||||
@@ -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{
|
||||
|
||||
@@ -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())
|
||||
}
|
||||
|
||||
@@ -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
@@ -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.")
|
||||
}
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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),
|
||||
},
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
})
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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),
|
||||
},
|
||||
}))
|
||||
|
||||
@@ -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)),
|
||||
),
|
||||
)
|
||||
|
||||
@@ -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{
|
||||
|
||||
Vendored
+20
-25
@@ -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)
|
||||
},
|
||||
|
||||
@@ -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.")
|
||||
|
||||
@@ -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 = ©
|
||||
}
|
||||
@@ -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 = ©
|
||||
}
|
||||
@@ -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 = ©
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user