Skip to content

Commit 7f1c0e4

Browse files
mostlikeleeiansltx
andauthored
Linux OS settings + disk encryption host filter fixes (#24200)
#24174 If some of the following don't apply, delete the relevant line. <!-- Note that API documentation changes are now addressed by the product design team. --> - [ ] Changes file added for user-visible changes in `changes/`, `orbit/changes/` or `ee/fleetd-chrome/changes`. See [Changes files](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/Committing-Changes.md#changes-files) for more information. - [X] Input data is properly validated, `SELECT *` is avoided, SQL injection is prevented (using placeholders for values in statements) - [X] Added/updated tests - [X] Manual QA for all new/changed functionality --------- Co-authored-by: Ian Littman <[email protected]>
1 parent 25fe7c0 commit 7f1c0e4

File tree

4 files changed

+133
-32
lines changed

4 files changed

+133
-32
lines changed

server/datastore/mysql/hosts.go

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1404,21 +1404,39 @@ func (ds *Datastore) filterHostsByOSSettingsStatus(sql string, opt fleet.HostLis
14041404
// or are servers. Similar logic could be applied to macOS hosts but is not included in this
14051405
// current implementation.
14061406

1407-
sqlFmt := ` AND h.platform IN('windows', 'darwin', 'ios', 'ipados') AND (ne.id IS NOT NULL OR mwe.host_uuid IS NOT NULL) AND hmdm.enrolled = 1`
1407+
// TODO once testLabelsListHostsInLabelOSSettings enrolls hosts into the correct MDM, switch to this:
1408+
/*sqlFmt := ` AND (
1409+
(h.platform = 'windows' AND mwe.host_uuid IS NOT NULL AND hmdm.enrolled = 1) -- windows
1410+
OR (h.platform IN ('darwin', 'ios', 'ipados') AND ne.id IS NOT NULL AND hmdm.enrolled = 1) -- apple
1411+
OR (h.platform = 'ubuntu' OR h.os_version LIKE 'Fedora%%') -- linux
1412+
)`*/
1413+
1414+
sqlFmt := ` AND (
1415+
(h.platform IN('windows', 'darwin', 'ios', 'ipados') AND (ne.id IS NOT NULL OR mwe.host_uuid IS NOT NULL) AND hmdm.enrolled = 1)
1416+
OR (h.platform = 'ubuntu' OR h.os_version LIKE 'Fedora%%')
1417+
)`
1418+
14081419
if opt.TeamFilter == nil {
14091420
// OS settings filter is not compatible with the "all teams" option so append the "no team"
14101421
// filter here (note that filterHostsByTeam applies the "no team" filter if TeamFilter == 0)
14111422
sqlFmt += ` AND h.team_id IS NULL`
14121423
}
1413-
var whereMacOS, whereWindows string
1424+
var whereMacOS, whereWindows, whereLinux string
14141425
sqlFmt += `
1415-
AND ((h.platform = 'windows' AND (%s))
1416-
OR ((h.platform = 'darwin' OR h.platform = 'ios' OR h.platform = 'ipados') AND (%s)))`
1426+
AND (
1427+
(h.platform = 'windows' AND (%s))
1428+
OR ((h.platform = 'darwin' OR h.platform = 'ios' OR h.platform = 'ipados') AND (%s))
1429+
OR ((h.os_version LIKE 'Fedora%%' OR h.platform = 'ubuntu') AND (%s))
1430+
)`
14171431

14181432
// construct the WHERE for macOS
14191433
whereMacOS = fmt.Sprintf(`(%s) = ?`, sqlCaseMDMAppleStatus())
14201434
paramsMacOS := []any{opt.OSSettingsFilter}
14211435

1436+
// construct the WHERE for linux
1437+
whereLinux = fmt.Sprintf(`(%s) = ?`, sqlCaseLinuxOSSettingsStatus())
1438+
paramsLinux := []any{opt.OSSettingsFilter}
1439+
14221440
// construct the WHERE for windows
14231441
whereWindows = `hmdm.is_server = 0`
14241442
paramsWindows := []any{}
@@ -1520,22 +1538,23 @@ OR ((h.platform = 'darwin' OR h.platform = 'ios' OR h.platform = 'ipados') AND (
15201538
paramsWindows = append(paramsWindows, opt.OSSettingsFilter)
15211539
params = append(params, paramsWindows...)
15221540
params = append(params, paramsMacOS...)
1541+
params = append(params, paramsLinux...)
15231542

1524-
return sql + fmt.Sprintf(sqlFmt, whereWindows, whereMacOS), params, nil
1543+
return sql + fmt.Sprintf(sqlFmt, whereWindows, whereMacOS, whereLinux), params, nil
15251544
}
15261545

15271546
func (ds *Datastore) filterHostsByOSSettingsDiskEncryptionStatus(sql string, opt fleet.HostListOptions, params []interface{}, enableDiskEncryption bool) (string, []interface{}) {
15281547
if !opt.OSSettingsDiskEncryptionFilter.IsValid() {
15291548
return sql, params
15301549
}
15311550

1532-
sqlFmt := " AND h.platform IN('windows', 'darwin')"
1551+
sqlFmt := " AND h.platform IN('windows', 'darwin', 'ubuntu', 'rhel')"
15331552
if opt.TeamFilter == nil {
15341553
// OS settings filter is not compatible with the "all teams" option so append the "no
15351554
// team" filter here (note that filterHostsByTeam applies the "no team" filter if TeamFilter == 0)
15361555
sqlFmt += ` AND h.team_id IS NULL`
15371556
}
1538-
sqlFmt += ` AND ((h.platform = 'windows' AND %s) OR (h.platform = 'darwin' AND %s))`
1557+
sqlFmt += ` AND ((h.platform = 'windows' AND %s) OR (h.platform = 'darwin' AND %s) OR ((h.platform = 'ubuntu' OR h.os_version LIKE 'Fedora%%') AND %s))`
15391558

15401559
var subqueryMacOS string
15411560
var subqueryParams []interface{}
@@ -1580,7 +1599,10 @@ func (ds *Datastore) filterHostsByOSSettingsDiskEncryptionStatus(sql string, opt
15801599
whereMacOS = "EXISTS (" + subqueryMacOS + ")"
15811600
}
15821601

1583-
return sql + fmt.Sprintf(sqlFmt, whereWindows, whereMacOS), append(params, subqueryParams...)
1602+
whereLinux := fmt.Sprintf(`(%s) = ?`, sqlCaseLinuxDiskEncryptionStatus())
1603+
subqueryParams = append(subqueryParams, opt.OSSettingsDiskEncryptionFilter)
1604+
1605+
return sql + fmt.Sprintf(sqlFmt, whereWindows, whereMacOS, whereLinux), append(params, subqueryParams...)
15841606
}
15851607

15861608
func filterHostsByMDMBootstrapPackageStatus(sql string, opt fleet.HostListOptions, params []interface{}) (string, []interface{}) {
@@ -3839,30 +3861,35 @@ ON DUPLICATE KEY UPDATE
38393861
`, hostID, encryptedBase64Passphrase, encryptedBase64Salt, keySlot)
38403862
return err
38413863
}
3864+
38423865
func (ds *Datastore) IsHostPendingEscrow(ctx context.Context, hostID uint) bool {
38433866
var pendingEscrowCount uint
38443867
_ = sqlx.GetContext(ctx, ds.reader(ctx), &pendingEscrowCount, `
38453868
SELECT COUNT(*) FROM host_disk_encryption_keys WHERE host_id = ? AND reset_requested = TRUE`, hostID)
38463869
return pendingEscrowCount > 0
38473870
}
3871+
38483872
func (ds *Datastore) ClearPendingEscrow(ctx context.Context, hostID uint) error {
38493873
_, err := ds.writer(ctx).ExecContext(ctx, `UPDATE host_disk_encryption_keys SET reset_requested = FALSE WHERE host_id = ?`, hostID)
38503874
return err
38513875
}
3876+
38523877
func (ds *Datastore) ReportEscrowError(ctx context.Context, hostID uint, errorMessage string) error {
38533878
_, err := ds.writer(ctx).ExecContext(ctx, `
38543879
INSERT INTO host_disk_encryption_keys
38553880
(host_id, base64_encrypted, client_error) VALUES (?, '', ?) ON DUPLICATE KEY UPDATE client_error = VALUES(client_error)
38563881
`, hostID, errorMessage)
38573882
return err
38583883
}
3884+
38593885
func (ds *Datastore) QueueEscrow(ctx context.Context, hostID uint) error {
38603886
_, err := ds.writer(ctx).ExecContext(ctx, `
38613887
INSERT INTO host_disk_encryption_keys
38623888
(host_id, base64_encrypted, reset_requested) VALUES (?, '', TRUE) ON DUPLICATE KEY UPDATE reset_requested = TRUE
38633889
`, hostID)
38643890
return err
38653891
}
3892+
38663893
func (ds *Datastore) AssertHasNoEncryptionKeyStored(ctx context.Context, hostID uint) error {
38673894
var hasKeyCount uint
38683895
err := sqlx.GetContext(ctx, ds.reader(ctx), &hasKeyCount, `

server/datastore/mysql/hosts_test.go

Lines changed: 62 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -790,6 +790,7 @@ func testHostsDelete(t *testing.T, ds *Datastore) {
790790
}
791791

792792
func listHostsCheckCount(t *testing.T, ds *Datastore, filter fleet.TeamFilter, opt fleet.HostListOptions, expectedCount int) []*fleet.Host {
793+
t.Helper()
793794
hosts, err := ds.ListHosts(context.Background(), filter, opt)
794795
require.NoError(t, err)
795796
count, err := ds.CountHosts(context.Background(), filter, opt)
@@ -809,36 +810,43 @@ func testHostListOptionsTeamFilter(t *testing.T, ds *Datastore) {
809810
require.NoError(t, err)
810811

811812
var hosts []*fleet.Host
812-
for i := 0; i < 10; i++ {
813+
for i := 0; i < 20; i++ {
813814
var opts []test.NewHostOption
814815
switch i {
815-
case 5, 6:
816+
case 0:
816817
opts = append(opts, test.WithPlatform("windows"))
818+
case 1, 2:
819+
opts = append(opts, test.WithPlatform("ubuntu")) // supported for linux encryption
820+
case 3, 4, 5:
821+
opts = append(opts, test.WithOSVersion("Fedora 33")) // supported for linux encryption
822+
case 6, 7, 8, 9:
823+
opts = append(opts, test.WithPlatform("foo")) // not supported for linux encryption
817824
}
818825
h := test.NewHost(t, ds, fmt.Sprintf("foo.local.%d", i), "1.1.1.1",
819-
fmt.Sprintf("%d", i), fmt.Sprintf("%d", i), time.Now(), opts...)
826+
fmt.Sprintf("%d", i), fmt.Sprintf("%d", i), time.Now(), opts...) // default macos platform
820827
hosts = append(hosts, h)
821828
nanoEnrollAndSetHostMDMData(t, ds, h, false)
822829
}
830+
823831
userFilter := fleet.TeamFilter{User: test.UserAdmin}
824832

825-
// confirm intial state
833+
// confirm initial state
826834
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{}, len(hosts))
827835
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: teamIDFilterNil}, len(hosts))
828836
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: teamIDFilterZero}, len(hosts))
829837
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: &team1.ID}, 0)
830838
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: &team2.ID}, 0)
831839

832-
// assign three hosts to team 1
833-
require.NoError(t, ds.AddHostsToTeam(context.Background(), &team1.ID, []uint{hosts[0].ID, hosts[1].ID, hosts[2].ID}))
840+
// assign three macos hosts to team 1
841+
require.NoError(t, ds.AddHostsToTeam(context.Background(), &team1.ID, []uint{hosts[10].ID, hosts[11].ID, hosts[12].ID}))
834842
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{}, len(hosts))
835843
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: teamIDFilterNil}, len(hosts))
836844
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: teamIDFilterZero}, len(hosts)-3)
837845
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: &team1.ID}, 3)
838846
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: &team2.ID}, 0)
839847

840848
// assign four hosts to team 2
841-
require.NoError(t, ds.AddHostsToTeam(context.Background(), &team2.ID, []uint{hosts[3].ID, hosts[4].ID, hosts[5].ID, hosts[6].ID}))
849+
require.NoError(t, ds.AddHostsToTeam(context.Background(), &team2.ID, []uint{hosts[13].ID, hosts[14].ID, hosts[15].ID, hosts[16].ID}))
842850
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{}, len(hosts))
843851
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: teamIDFilterNil}, len(hosts))
844852
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: teamIDFilterZero}, len(hosts)-7)
@@ -851,7 +859,7 @@ func testHostListOptionsTeamFilter(t *testing.T, ds *Datastore) {
851859
{
852860
ProfileUUID: profUUID,
853861
ProfileIdentifier: "identifier",
854-
HostUUID: hosts[0].UUID, // hosts[0] is assgined to team 1
862+
HostUUID: hosts[10].UUID, // hosts[10] is assgined to team 1
855863
CommandUUID: "command-uuid-1",
856864
OperationType: fleet.MDMOperationTypeInstall,
857865
Status: &fleet.MDMDeliveryVerifying,
@@ -869,46 +877,78 @@ func testHostListOptionsTeamFilter(t *testing.T, ds *Datastore) {
869877
{
870878
ProfileUUID: profUUID,
871879
ProfileIdentifier: "identifier",
872-
HostUUID: hosts[9].UUID, // hosts[9] is assgined to no team
880+
HostUUID: hosts[19].UUID, // hosts[19] is assgined to no team
873881
CommandUUID: "command-uuid-2",
874882
OperationType: fleet.MDMOperationTypeInstall,
875883
Status: &fleet.MDMDeliveryVerifying,
876884
Checksum: []byte("csum"),
877885
},
878886
}))
879-
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: &team1.ID, MacOSSettingsFilter: fleet.OSSettingsVerifying}, 1) // hosts[0]
887+
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: &team1.ID, MacOSSettingsFilter: fleet.OSSettingsVerifying}, 1) // hosts[10]
880888
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: &team2.ID, MacOSSettingsFilter: fleet.OSSettingsVerifying}, 0) // wrong team
881889
// macos settings filter does not support "all teams" so both teamIDFilterNil acts the same as teamIDFilterZero
882-
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: teamIDFilterZero, MacOSSettingsFilter: fleet.OSSettingsVerifying}, 1) // hosts[9]
883-
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: teamIDFilterNil, MacOSSettingsFilter: fleet.OSSettingsVerifying}, 1) // hosts[9]
884-
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{MacOSSettingsFilter: fleet.OSSettingsVerifying}, 1) // hosts[9]
890+
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: teamIDFilterZero, MacOSSettingsFilter: fleet.OSSettingsVerifying}, 1) // hosts[19]
891+
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: teamIDFilterNil, MacOSSettingsFilter: fleet.OSSettingsVerifying}, 1) // hosts[19]
892+
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{MacOSSettingsFilter: fleet.OSSettingsVerifying}, 1) // hosts[19]
885893

886-
// test team filter in combination with os settings filter
887-
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: &team1.ID, OSSettingsFilter: fleet.OSSettingsVerifying}, 1) // hosts[0]
894+
// OS Settings Filters
895+
896+
// team 1
897+
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: &team1.ID, OSSettingsFilter: fleet.OSSettingsVerifying}, 1) // hosts[10]
898+
899+
// team 2
888900
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: &team2.ID, OSSettingsFilter: fleet.OSSettingsVerifying}, 0) // wrong team
901+
889902
// os settings filter does not support "all teams" so teamIDFilterNil acts the same as teamIDFilterZero
890-
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: teamIDFilterZero, OSSettingsFilter: fleet.OSSettingsVerifying}, 1) // hosts[9]
891-
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: teamIDFilterNil, OSSettingsFilter: fleet.OSSettingsVerifying}, 1) // hosts[9]
903+
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: teamIDFilterZero, OSSettingsFilter: fleet.OSSettingsVerifying}, 1) // hosts[19]
904+
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: teamIDFilterNil, OSSettingsFilter: fleet.OSSettingsVerifying}, 1) // hosts[19]
892905
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{OSSettingsFilter: fleet.OSSettingsVerifying}, 1)
906+
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: teamIDFilterZero, OSSettingsFilter: fleet.OSSettingsPending}, 5) // pending supported linux hosts
907+
908+
require.NoError(t, ds.SaveLUKSData(context.Background(), hosts[1].ID, "key1", "morton", 1)) // set host 1 to verified
909+
require.NoError(t, ds.ReportEscrowError(context.Background(), hosts[2].ID, "error")) // set host 2 to failed
910+
911+
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: teamIDFilterZero, OSSettingsFilter: fleet.OSSettingsVerified}, 1) // hosts[1]
912+
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: teamIDFilterZero, OSSettingsFilter: fleet.OSSettingsFailed}, 1) // hosts[2]
913+
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: teamIDFilterZero, OSSettingsFilter: fleet.OSSettingsPending}, 3) // still-pending supported linux hosts
914+
915+
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: teamIDFilterZero, OSSettingsDiskEncryptionFilter: fleet.DiskEncryptionVerified}, 1)
916+
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: teamIDFilterZero, OSSettingsDiskEncryptionFilter: fleet.DiskEncryptionFailed}, 1)
917+
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: teamIDFilterZero, OSSettingsDiskEncryptionFilter: fleet.DiskEncryptionActionRequired}, 3)
893918

894919
// test team filter in combination with os settings disk encryptionfilter
895920
require.NoError(t, ds.BulkUpsertMDMAppleHostProfiles(context.Background(), []*fleet.MDMAppleBulkUpsertHostProfilePayload{
896921
{
897922
ProfileUUID: profUUID,
898923
ProfileIdentifier: mobileconfig.FleetFileVaultPayloadIdentifier,
899-
HostUUID: hosts[8].UUID, // hosts[8] is assgined to no team
924+
HostUUID: hosts[18].UUID, // hosts[18] is assgined to no team
900925
CommandUUID: "command-uuid-3",
901926
OperationType: fleet.MDMOperationTypeInstall,
902927
Status: &fleet.MDMDeliveryPending,
903928
Checksum: []byte("disk-encryption-csum"),
904929
},
905930
}))
906-
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: &team1.ID, OSSettingsDiskEncryptionFilter: fleet.DiskEncryptionEnforcing}, 0) // hosts[0]
931+
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: &team1.ID, OSSettingsDiskEncryptionFilter: fleet.DiskEncryptionEnforcing}, 0) // hosts[10]
907932
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: &team2.ID, OSSettingsDiskEncryptionFilter: fleet.DiskEncryptionEnforcing}, 0) // wrong team
908933
// os settings filter does not support "all teams" so teamIDFilterNil acts the same as teamIDFilterZero
909-
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: teamIDFilterZero, OSSettingsDiskEncryptionFilter: fleet.DiskEncryptionEnforcing}, 1) // hosts[8]
910-
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: teamIDFilterNil, OSSettingsDiskEncryptionFilter: fleet.DiskEncryptionEnforcing}, 1) // hosts[8]
911-
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{OSSettingsDiskEncryptionFilter: fleet.DiskEncryptionEnforcing}, 1) // hosts[8]
934+
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: teamIDFilterZero, OSSettingsDiskEncryptionFilter: fleet.DiskEncryptionEnforcing}, 1) // hosts[18]
935+
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: teamIDFilterNil, OSSettingsDiskEncryptionFilter: fleet.DiskEncryptionEnforcing}, 1) // hosts[18]
936+
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{OSSettingsDiskEncryptionFilter: fleet.DiskEncryptionEnforcing}, 1) // hosts[18]
937+
938+
// move linux hosts to team 1 (un-escrows keys)
939+
require.NoError(t, ds.AddHostsToTeam(context.Background(), &team1.ID, []uint{hosts[1].ID, hosts[2].ID, hosts[3].ID, hosts[4].ID, hosts[5].ID}))
940+
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: &team1.ID, OSSettingsFilter: fleet.OSSettingsPending}, 5) // pending supported linux hosts
941+
942+
require.NoError(t, ds.SaveLUKSData(context.Background(), hosts[1].ID, "key1", "mutton", 2)) // set host 1 to verified
943+
require.NoError(t, ds.ReportEscrowError(context.Background(), hosts[2].ID, "error")) // set host 2 to failed
944+
945+
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: &team1.ID, OSSettingsFilter: fleet.OSSettingsVerified}, 1) // hosts[1]
946+
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: &team1.ID, OSSettingsFilter: fleet.OSSettingsFailed}, 1) // hosts[2]
947+
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: &team1.ID, OSSettingsFilter: fleet.OSSettingsPending}, 3) // still-pending supported linux hosts
948+
949+
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: &team1.ID, OSSettingsDiskEncryptionFilter: fleet.DiskEncryptionVerified}, 1)
950+
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: &team1.ID, OSSettingsDiskEncryptionFilter: fleet.DiskEncryptionFailed}, 1)
951+
listHostsCheckCount(t, ds, userFilter, fleet.HostListOptions{TeamFilter: &team1.ID, OSSettingsDiskEncryptionFilter: fleet.DiskEncryptionActionRequired}, 3)
912952

913953
// Bad team filter
914954
_, err = ds.ListHosts(context.Background(), userFilter, fleet.HostListOptions{TeamFilter: teamIDFilterBad})

server/datastore/mysql/labels_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1568,14 +1568,14 @@ func testLabelsListHostsInLabelOSSettings(t *testing.T, db *Datastore) {
15681568
hosts := listHostsInLabelCheckCount(t, db, filter, l1.ID, fleet.HostListOptions{}, 3)
15691569
checkHosts(t, hosts, []uint{h1.ID, h2.ID, h3.ID})
15701570

1571-
t.Run("os_settings", func(t *testing.T) {
1571+
t.Run("os_settings_disk_encryption", func(t *testing.T) {
15721572
hosts = listHostsInLabelCheckCount(t, db, filter, l1.ID, fleet.HostListOptions{OSSettingsDiskEncryptionFilter: fleet.DiskEncryptionVerified}, 1)
15731573
checkHosts(t, hosts, []uint{h1.ID})
15741574
hosts = listHostsInLabelCheckCount(t, db, filter, l1.ID, fleet.HostListOptions{OSSettingsDiskEncryptionFilter: fleet.DiskEncryptionEnforcing}, 1)
15751575
checkHosts(t, hosts, []uint{h2.ID})
15761576
})
15771577

1578-
t.Run("os_settings_disk_encryption", func(t *testing.T) {
1578+
t.Run("os_settings", func(t *testing.T) {
15791579
hosts = listHostsInLabelCheckCount(t, db, filter, l1.ID, fleet.HostListOptions{OSSettingsFilter: fleet.OSSettingsVerified}, 1)
15801580
checkHosts(t, hosts, []uint{h1.ID})
15811581
hosts = listHostsInLabelCheckCount(t, db, filter, l1.ID, fleet.HostListOptions{OSSettingsFilter: fleet.OSSettingsPending}, 1)

0 commit comments

Comments
 (0)