@@ -77,7 +77,7 @@ func (ts *IndexWorkerTestSuite) SetupTest() {
7777}
7878
7979func (ts * IndexWorkerTestSuite ) cleanupIndexes () {
80- indexes := getUsersIndexes (ts .namespace )
80+ indexes := getUsersIndexes (ts .namespace , ts . namespace )
8181 for _ , idx := range indexes {
8282 // Drop any existing indexes (valid or invalid)
8383 dropQuery := fmt .Sprintf ("DROP INDEX IF EXISTS %q.%s" , ts .namespace , idx .name )
@@ -91,7 +91,7 @@ func (ts *IndexWorkerTestSuite) TestCreateIndexesHappyPath() {
9191 err := CreateIndexes (ctx , ts .config , ts .logger )
9292 require .NoError (ts .T (), err )
9393
94- indexes := getUsersIndexes (ts .namespace )
94+ indexes := getUsersIndexes (ts .namespace , ts . namespace )
9595 existingIndexes , err := getIndexStatuses (ts .popDB , ts .namespace , getIndexNames (indexes ))
9696 require .NoError (ts .T (), err )
9797
@@ -135,7 +135,7 @@ func (ts *IndexWorkerTestSuite) TestIdempotency() {
135135 require .NoError (ts .T (), err )
136136
137137 // Get the state after first run
138- indexes := getUsersIndexes (ts .namespace )
138+ indexes := getUsersIndexes (ts .namespace , ts . namespace )
139139 firstRunIndexes , err := getIndexStatuses (ts .popDB , ts .namespace , getIndexNames (indexes ))
140140 require .NoError (ts .T (), err )
141141 require .Equal (ts .T (), len (indexes ), len (firstRunIndexes ))
@@ -191,7 +191,7 @@ func (ts *IndexWorkerTestSuite) TestOutOfBandIndexRemoval() {
191191 require .NoError (ts .T (), err )
192192
193193 // Verify all indexes exist
194- indexes := getUsersIndexes (ts .namespace )
194+ indexes := getUsersIndexes (ts .namespace , ts . namespace )
195195 existingIndexes , err := getIndexStatuses (ts .popDB , ts .namespace , getIndexNames (indexes ))
196196 require .NoError (ts .T (), err )
197197 assert .Equal (ts .T (), len (indexes ), len (existingIndexes ))
@@ -277,7 +277,7 @@ func (ts *IndexWorkerTestSuite) TestConcurrentWorkers() {
277277 assert .Equal (ts .T (), numWorkers - 1 , lockSkipCount , "Other workers should skip due to lock" )
278278
279279 // Verify all indexes were created successfully
280- indexes := getUsersIndexes (ts .namespace )
280+ indexes := getUsersIndexes (ts .namespace , ts . namespace )
281281 existingIndexes , err := getIndexStatuses (ts .popDB , ts .namespace , getIndexNames (indexes ))
282282 require .NoError (ts .T (), err )
283283 assert .Equal (ts .T (), len (indexes ), len (existingIndexes ), "All indexes should be created" )
@@ -306,7 +306,7 @@ func (ts *IndexWorkerTestSuite) TestCreateIndexesWithInvalidIndexes() {
306306 require .NoError (ts .T (), err , "Initial CreateIndexes should succeed" )
307307
308308 // Verify all indexes were created and are valid
309- indexes := getUsersIndexes (ts .namespace )
309+ indexes := getUsersIndexes (ts .namespace , ts . namespace )
310310 initialIndexes , err := getIndexStatuses (ts .popDB , ts .namespace , getIndexNames (indexes ))
311311 require .NoError (ts .T (), err )
312312 assert .Equal (ts .T (), len (indexes ), len (initialIndexes ), "All indexes should be created initially" )
@@ -337,7 +337,7 @@ func (ts *IndexWorkerTestSuite) TestCreateIndexesWithInvalidIndexes() {
337337 defer manipulatorDB .Close ()
338338
339339 // Select the first 2 indexes to mark as invalid
340- allIndexes := getUsersIndexes (ts .namespace )
340+ allIndexes := getUsersIndexes (ts .namespace , ts . namespace )
341341 indexesToInvalidate := []string {allIndexes [0 ].name , allIndexes [1 ].name }
342342
343343 for _ , indexName := range indexesToInvalidate {
@@ -393,6 +393,44 @@ func (ts *IndexWorkerTestSuite) TestCreateIndexesWithInvalidIndexes() {
393393 ts .logger .Infof ("Successfully recovered from %d invalid indexes" , len (indexesToInvalidate ))
394394}
395395
396+ // TestCreateIndexesWithoutTrgmExtension tests that CreateIndexes fails when pg_trgm extension doesn't exist
397+ // and that no indexes are created when this prerequisite check fails.
398+ func (ts * IndexWorkerTestSuite ) TestCreateIndexesWithoutTrgmExtension () {
399+ ctx := context .Background ()
400+
401+ // Drop the pg_trgm extension to simulate it not being available
402+ dropExtQuery := "DROP EXTENSION IF EXISTS pg_trgm CASCADE"
403+ err := ts .db .RawQuery (dropExtQuery ).Exec ()
404+ require .NoError (ts .T (), err , "Should be able to drop pg_trgm extension" )
405+
406+ // Verify the extension is dropped
407+ var extensionExists bool
408+ checkExtQuery := "SELECT EXISTS(SELECT 1 FROM pg_extension WHERE extname = 'pg_trgm')"
409+ err = ts .db .RawQuery (checkExtQuery ).First (& extensionExists )
410+ require .NoError (ts .T (), err )
411+ assert .False (ts .T (), extensionExists , "pg_trgm extension should not exist" )
412+
413+ // Verify no indexes exist initially
414+ indexes := getUsersIndexes (ts .namespace , ts .namespace )
415+ existingIndexes , err := getIndexStatuses (ts .popDB , ts .namespace , getIndexNames (indexes ))
416+ require .NoError (ts .T (), err )
417+ assert .Empty (ts .T (), existingIndexes , "No indexes should exist initially" )
418+
419+ // Try to create indexes without pg_trgm extension
420+ err = CreateIndexes (ctx , ts .config , ts .logger )
421+ assert .Error (ts .T (), err , "CreateIndexes should fail when pg_trgm extension doesn't exist" )
422+ assert .ErrorIs (ts .T (), err , ErrExtensionNotFound )
423+
424+ existingIndexes , err = getIndexStatuses (ts .popDB , ts .namespace , getIndexNames (indexes ))
425+ require .NoError (ts .T (), err )
426+ assert .Empty (ts .T (), existingIndexes , "No indexes should have been created when pg_trgm is missing" )
427+
428+ // Restore pg_trgm extension for other tests
429+ createExtQuery := "CREATE EXTENSION IF NOT EXISTS pg_trgm"
430+ err = ts .db .RawQuery (createExtQuery ).Exec ()
431+ require .NoError (ts .T (), err , "Should be able to restore pg_trgm extension" )
432+ }
433+
396434// Run the test suite
397435func TestIndexWorker (t * testing.T ) {
398436 suite .Run (t , new (IndexWorkerTestSuite ))
0 commit comments