From 49e4bad88d7fb5d28f7636aceb769141e93eea78 Mon Sep 17 00:00:00 2001 From: Zachary Wasserman Date: Tue, 18 Apr 2017 12:41:51 -0700 Subject: [PATCH] Do not return deleted packs with query (#1497) Closes #1476 --- CHANGELOG.md | 6 ++-- server/datastore/datastore_queries_test.go | 2 +- .../datastore_scheduled_queries_test.go | 28 +++++++++++++++++++ server/datastore/datastore_test.go | 1 + server/datastore/mysql/queries.go | 1 + 5 files changed, 35 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6910833d2c..789fca4592 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -* Improve online status detection. +* Improved online status detection. The Kolide server now tracks the `distributed_interval` and `config_tls_refresh` values for each individual host (these can be different if they are set via flagfile and not through Kolide), to ensure that online status is represented as accurately as possible. @@ -6,7 +6,9 @@ If no JWT key is provided by the user, the server will print a new suggested random JWT key for use. -* Fix rounding error when showing % of online hosts +* Fixed bug in which deleted packs were still displayed on the query sidebar. + +* Fixed rounding error when showing % of online hosts. ## Kolide 1.0.3 (April 3, 2017) diff --git a/server/datastore/datastore_queries_test.go b/server/datastore/datastore_queries_test.go index 21fd9b0001..c355583231 100644 --- a/server/datastore/datastore_queries_test.go +++ b/server/datastore/datastore_queries_test.go @@ -39,11 +39,11 @@ func testGetQueryByName(t *testing.T, ds kolide.Datastore) { require.Nil(t, err) assert.True(t, ok) assert.Equal(t, "q1", actual.Name) + assert.Equal(t, "select * from time", actual.Query) actual, ok, err = ds.QueryByName("xxx") assert.Nil(t, err) assert.False(t, ok) - } func testDeleteQueries(t *testing.T, ds kolide.Datastore) { diff --git a/server/datastore/datastore_scheduled_queries_test.go b/server/datastore/datastore_scheduled_queries_test.go index beaaea3a20..4005ed966b 100644 --- a/server/datastore/datastore_scheduled_queries_test.go +++ b/server/datastore/datastore_scheduled_queries_test.go @@ -91,3 +91,31 @@ func testSaveScheduledQuery(t *testing.T, ds kolide.Datastore) { require.Nil(t, err) assert.Equal(t, uint(120), queryVerify.Interval) } + +func testScheduledQueryWithDeletedPack(t *testing.T, ds kolide.Datastore) { + // When a pack is soft-deleted, it should not appear in the list of + // packs associated with a query. + + if ds.Name() == "inmem" { + t.Skip("inmem is being deprecated, test skipped") + } + + user := test.NewUser(t, ds, "Zach", "zwass", "zwass@kolide.co", true) + query := test.NewQuery(t, ds, "q1", "select 1", user.ID, true) + pack := test.NewPack(t, ds, "foobar_pack") + test.NewScheduledQuery(t, ds, pack.ID, query.ID, 60, false, false) + + actual, err := ds.Query(query.ID) + require.Nil(t, err) + assert.Equal(t, "q1", actual.Name) + assert.Equal(t, "select 1", actual.Query) + assert.Equal(t, []kolide.Pack{*pack}, actual.Packs) + + require.Nil(t, ds.DeletePack(pack.ID)) + + actual, err = ds.Query(query.ID) + require.Nil(t, err) + assert.Equal(t, "q1", actual.Name) + assert.Equal(t, "select 1", actual.Query) + assert.Empty(t, actual.Packs) +} diff --git a/server/datastore/datastore_test.go b/server/datastore/datastore_test.go index 8752f666c5..beb5501733 100644 --- a/server/datastore/datastore_test.go +++ b/server/datastore/datastore_test.go @@ -61,6 +61,7 @@ var testFunctions = [...]func(*testing.T, kolide.Datastore){ testOptionsToConfig, testGetPackByName, testGetQueryByName, + testScheduledQueryWithDeletedPack, testDecorators, testFileIntegrityMonitoring, testYARAStore, diff --git a/server/datastore/mysql/queries.go b/server/datastore/mysql/queries.go index 2f54877fbe..2340917749 100644 --- a/server/datastore/mysql/queries.go +++ b/server/datastore/mysql/queries.go @@ -188,6 +188,7 @@ func (d *Datastore) loadPacksForQueries(queries []*kolide.Query) error { JOIN scheduled_queries sq ON p.id = sq.pack_id WHERE query_id IN (?) + AND NOT p.deleted ` // Used to map the results