diff --git a/changes/15964-software b/changes/15964-software new file mode 100644 index 0000000000..e05b5ede9d --- /dev/null +++ b/changes/15964-software @@ -0,0 +1 @@ +* Fixed a bug that caused the software/titles page to error diff --git a/server/datastore/mysql/software_titles.go b/server/datastore/mysql/software_titles.go index aa592dbe32..5a90cb1228 100644 --- a/server/datastore/mysql/software_titles.go +++ b/server/datastore/mysql/software_titles.go @@ -184,6 +184,7 @@ JOIN software_titles_host_counts sthc ON sthc.software_title_id = st.id %s -- placeholder for optional extra WHERE filter WHERE sthc.team_id = ? %s +AND sthc.hosts_count > 0 GROUP BY st.id` cveJoinType := "LEFT" diff --git a/server/datastore/mysql/software_titles_test.go b/server/datastore/mysql/software_titles_test.go index dd943d1c2c..fe91532cc1 100644 --- a/server/datastore/mysql/software_titles_test.go +++ b/server/datastore/mysql/software_titles_test.go @@ -215,10 +215,16 @@ func testSoftwareSyncHostsSoftwareTitles(t *testing.T, ds *Datastore) { checkTableTotalCount(3) - // update host4 (team2), remove all software and delete team + // update host4 (team2), remove all software software4 = []fleet.Software{} _, err = ds.UpdateHostSoftware(ctx, host4.ID, software4) require.NoError(t, err) + require.NoError(t, ds.ReconcileSoftwareTitles(ctx)) + require.NoError(t, ds.SyncHostsSoftware(ctx, time.Now())) + require.NoError(t, ds.SyncHostsSoftwareTitles(ctx, time.Now())) + listSoftwareTitlesCheckCount(t, ds, 0, 0, team2Opts, false) + + // delete team require.NoError(t, ds.DeleteTeam(ctx, team2.ID)) // this call will remove team2 from the software host counts table