github.com/muhammadn/cortex@v1.9.1-0.20220510110439-46bb7000d03d/pkg/chunk/purger/tenant_deletion_api_test.go (about) 1 package purger 2 3 import ( 4 "bytes" 5 "context" 6 "net/http" 7 "net/http/httptest" 8 "path" 9 "testing" 10 11 "github.com/go-kit/log" 12 "github.com/stretchr/testify/require" 13 "github.com/thanos-io/thanos/pkg/objstore" 14 "github.com/weaveworks/common/user" 15 16 "github.com/cortexproject/cortex/pkg/storage/tsdb" 17 ) 18 19 func TestDeleteTenant(t *testing.T) { 20 bkt := objstore.NewInMemBucket() 21 api := newTenantDeletionAPI(bkt, nil, log.NewNopLogger()) 22 23 { 24 resp := httptest.NewRecorder() 25 api.DeleteTenant(resp, &http.Request{}) 26 require.Equal(t, http.StatusUnauthorized, resp.Code) 27 } 28 29 { 30 ctx := context.Background() 31 ctx = user.InjectOrgID(ctx, "fake") 32 33 req := &http.Request{} 34 resp := httptest.NewRecorder() 35 api.DeleteTenant(resp, req.WithContext(ctx)) 36 37 require.Equal(t, http.StatusOK, resp.Code) 38 objs := bkt.Objects() 39 require.NotNil(t, objs[path.Join("fake", tsdb.TenantDeletionMarkPath)]) 40 } 41 } 42 43 func TestDeleteTenantStatus(t *testing.T) { 44 const username = "user" 45 46 for name, tc := range map[string]struct { 47 objects map[string][]byte 48 expectedBlocksDeleted bool 49 }{ 50 "empty": { 51 objects: nil, 52 expectedBlocksDeleted: true, 53 }, 54 55 "no user objects": { 56 objects: map[string][]byte{ 57 "different-user/01EQK4QKFHVSZYVJ908Y7HH9E0/meta.json": []byte("data"), 58 }, 59 expectedBlocksDeleted: true, 60 }, 61 62 "non-block files": { 63 objects: map[string][]byte{ 64 "user/deletion-mark.json": []byte("data"), 65 }, 66 expectedBlocksDeleted: true, 67 }, 68 69 "block files": { 70 objects: map[string][]byte{ 71 "user/01EQK4QKFHVSZYVJ908Y7HH9E0/meta.json": []byte("data"), 72 }, 73 expectedBlocksDeleted: false, 74 }, 75 } { 76 t.Run(name, func(t *testing.T) { 77 bkt := objstore.NewInMemBucket() 78 // "upload" objects 79 for objName, data := range tc.objects { 80 require.NoError(t, bkt.Upload(context.Background(), objName, bytes.NewReader(data))) 81 } 82 83 api := newTenantDeletionAPI(bkt, nil, log.NewNopLogger()) 84 85 res, err := api.isBlocksForUserDeleted(context.Background(), username) 86 require.NoError(t, err) 87 require.Equal(t, tc.expectedBlocksDeleted, res) 88 }) 89 } 90 }