From 8794466a645977824a2d4d425ccbb5eb915d899f Mon Sep 17 00:00:00 2001 From: Jahziel Villasana-Espinoza Date: Wed, 12 Feb 2025 15:47:06 -0500 Subject: [PATCH] fix: make sure going from include to exclude labels in gitops works (#26302) > For #26290 # Checklist for submitter If some of the following don't apply, delete the relevant line. - [x] Added/updated automated tests - [x] Manual QA for all new/changed functionality --- server/datastore/mysql/vpp.go | 2 +- server/datastore/mysql/vpp_test.go | 59 ++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/server/datastore/mysql/vpp.go b/server/datastore/mysql/vpp.go index 3100a0c7ab21..cc81fca0f310 100644 --- a/server/datastore/mysql/vpp.go +++ b/server/datastore/mysql/vpp.go @@ -247,7 +247,7 @@ func (ds *Datastore) getExistingLabels(ctx context.Context, vppAppTeamID uint) ( return &labels, nil case len(inclAny) > 0: - labels.LabelScope = fleet.LabelScopeExcludeAny + labels.LabelScope = fleet.LabelScopeIncludeAny labels.ByName = make(map[string]fleet.LabelIdent, len(inclAny)) for _, l := range inclAny { labels.ByName[l.LabelName] = fleet.LabelIdent{LabelName: l.LabelName, LabelID: l.LabelID} diff --git a/server/datastore/mysql/vpp_test.go b/server/datastore/mysql/vpp_test.go index 0e3b1a3cd2b7..485fdaf138c4 100644 --- a/server/datastore/mysql/vpp_test.go +++ b/server/datastore/mysql/vpp_test.go @@ -1792,4 +1792,63 @@ func testSetTeamVPPAppsWithLabels(t *testing.T, ds *Datastore) { _, ok := app2.VPPAppTeam.ValidatedLabels.ByName[l.LabelName] require.True(t, ok) } + + // switch label types + app1.VPPAppTeam = fleet.VPPAppTeam{VPPAppID: app1.VPPAppID, ValidatedLabels: &fleet.LabelIdentsWithScope{ + LabelScope: fleet.LabelScopeExcludeAny, + ByName: map[string]fleet.LabelIdent{ + label1.Name: { + LabelID: label1.ID, + LabelName: label1.Name, + }, + label2.Name: { + LabelID: label2.ID, + LabelName: label2.Name, + }, + }, + }} + + app2.VPPAppTeam = fleet.VPPAppTeam{VPPAppID: app2.VPPAppID, ValidatedLabels: &fleet.LabelIdentsWithScope{ + LabelScope: fleet.LabelScopeIncludeAny, + ByName: map[string]fleet.LabelIdent{ + label1.Name: { + LabelID: label1.ID, + LabelName: label1.Name, + }, + label2.Name: { + LabelID: label2.ID, + LabelName: label2.Name, + }, + }, + }} + + err = ds.SetTeamVPPApps(ctx, &team.ID, []fleet.VPPAppTeam{ + app1.VPPAppTeam, + app2.VPPAppTeam, + }) + require.NoError(t, err) + + assigned, err = ds.GetAssignedVPPApps(ctx, &team.ID) + require.NoError(t, err) + require.Len(t, assigned, 2) + + app1Meta, err = ds.GetVPPAppMetadataByTeamAndTitleID(ctx, &team.ID, app1.TitleID) + require.NoError(t, err) + + app2Meta, err = ds.GetVPPAppMetadataByTeamAndTitleID(ctx, &team.ID, app2.TitleID) + require.NoError(t, err) + + require.Len(t, app1Meta.LabelsIncludeAny, 0) + require.Len(t, app1Meta.LabelsExcludeAny, 2) + for _, l := range app1Meta.LabelsExcludeAny { + _, ok := app1.VPPAppTeam.ValidatedLabels.ByName[l.LabelName] + require.True(t, ok) + } + + require.Len(t, app2Meta.LabelsExcludeAny, 0) + require.Len(t, app2Meta.LabelsIncludeAny, 2) + for _, l := range app2Meta.LabelsIncludeAny { + _, ok := app2.VPPAppTeam.ValidatedLabels.ByName[l.LabelName] + require.True(t, ok) + } }