github.com/weaviate/weaviate@v1.24.6/test/acceptance/multi_tenancy/add_tenant_objects_test.go (about) 1 // _ _ 2 // __ _____ __ ___ ___ __ _| |_ ___ 3 // \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \ 4 // \ V V / __/ (_| |\ V /| | (_| | || __/ 5 // \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___| 6 // 7 // Copyright © 2016 - 2024 Weaviate B.V. All rights reserved. 8 // 9 // CONTACT: hello@weaviate.io 10 // 11 12 package test 13 14 import ( 15 "testing" 16 17 "github.com/weaviate/weaviate/client/objects" 18 19 "github.com/stretchr/testify/assert" 20 "github.com/stretchr/testify/require" 21 "github.com/weaviate/weaviate/entities/models" 22 "github.com/weaviate/weaviate/entities/schema" 23 "github.com/weaviate/weaviate/test/helper" 24 ) 25 26 func TestAddTenantObjects(t *testing.T) { 27 className := "MultiTenantClass" 28 testClass := models.Class{ 29 Class: className, 30 MultiTenancyConfig: &models.MultiTenancyConfig{ 31 Enabled: true, 32 }, 33 Properties: []*models.Property{ 34 { 35 Name: "name", 36 DataType: schema.DataTypeText.PropString(), 37 }, 38 }, 39 } 40 tenantNames := []string{ 41 "Tenant1", "Tenant2", "Tenant3", 42 } 43 tenantObjects := []*models.Object{ 44 { 45 ID: "0927a1e0-398e-4e76-91fb-04a7a8f0405c", 46 Class: className, 47 Properties: map[string]interface{}{ 48 "name": tenantNames[0], 49 }, 50 Tenant: tenantNames[0], 51 }, 52 { 53 ID: "831ae1d0-f441-44b1-bb2a-46548048e26f", 54 Class: className, 55 Properties: map[string]interface{}{ 56 "name": tenantNames[1], 57 }, 58 Tenant: tenantNames[1], 59 }, 60 { 61 ID: "6f3363e0-c0a0-4618-bf1f-b6cad9cdff59", 62 Class: className, 63 Properties: map[string]interface{}{ 64 "name": tenantNames[2], 65 }, 66 Tenant: tenantNames[2], 67 }, 68 } 69 70 defer func() { 71 helper.DeleteClass(t, className) 72 }() 73 74 t.Run("create class with multi-tenancy enabled", func(t *testing.T) { 75 helper.CreateClass(t, &testClass) 76 }) 77 78 t.Run("create tenants", func(t *testing.T) { 79 tenants := make([]*models.Tenant, len(tenantNames)) 80 for i := range tenants { 81 tenants[i] = &models.Tenant{Name: tenantNames[i]} 82 } 83 helper.CreateTenants(t, className, tenants) 84 }) 85 86 t.Run("add tenant objects", func(t *testing.T) { 87 for _, obj := range tenantObjects { 88 helper.CreateObject(t, obj) 89 } 90 }) 91 92 t.Run("verify object creation", func(t *testing.T) { 93 for i, obj := range tenantObjects { 94 resp, err := helper.TenantObject(t, obj.Class, obj.ID, tenantNames[i]) 95 require.Nil(t, err) 96 assert.Equal(t, obj.Class, resp.Class) 97 assert.Equal(t, obj.Properties, resp.Properties) 98 } 99 }) 100 } 101 102 func TestAddTenantObjectsToNonMultiClass(t *testing.T) { 103 className := "NoTenantClass" 104 tenantName := "randomTenant" 105 defer func() { 106 helper.DeleteClass(t, className) 107 }() 108 109 testClass := models.Class{ 110 Class: className, 111 MultiTenancyConfig: &models.MultiTenancyConfig{Enabled: false}, 112 } 113 helper.CreateClass(t, &testClass) 114 115 objWithTenant := &models.Object{ 116 ID: "0927a1e0-398e-4e76-91fb-04a7a8f0405c", 117 Class: className, 118 Tenant: tenantName, 119 } 120 params := objects.NewObjectsCreateParams().WithBody(objWithTenant) 121 _, err := helper.Client(t).Objects.ObjectsCreate(params, nil) 122 require.NotNil(t, err) 123 } 124 125 func TestAddNonTenantObjectsToMultiClass(t *testing.T) { 126 className := "TenantClassFail" 127 defer func() { 128 helper.DeleteClass(t, className) 129 }() 130 131 testClass := models.Class{ 132 Class: className, 133 MultiTenancyConfig: &models.MultiTenancyConfig{Enabled: true}, 134 } 135 helper.CreateClass(t, &testClass) 136 objWithTenant := &models.Object{ 137 ID: "0927a1e0-398e-4e76-91fb-04a7a8f0405c", 138 Class: className, 139 } 140 params := objects.NewObjectsCreateParams().WithBody(objWithTenant) 141 _, err := helper.Client(t).Objects.ObjectsCreate(params, nil) 142 require.NotNil(t, err) 143 } 144 145 func TestAddObjectWithNonexistentTenantToMultiClass(t *testing.T) { 146 className := "TenantClass" 147 defer func() { 148 helper.DeleteClass(t, className) 149 }() 150 151 testClass := models.Class{ 152 Class: className, 153 MultiTenancyConfig: &models.MultiTenancyConfig{Enabled: true}, 154 } 155 helper.CreateClass(t, &testClass) 156 helper.CreateTenants(t, className, []*models.Tenant{{Name: "randomTenant1"}}) 157 158 objWithTenant := &models.Object{ 159 ID: "0927a1e0-398e-4e76-91fb-04a7a8f0405c", 160 Class: className, 161 Tenant: "randomTenant2", 162 } 163 params := objects.NewObjectsCreateParams().WithBody(objWithTenant) 164 _, err := helper.Client(t).Objects.ObjectsCreate(params, nil) 165 require.NotNil(t, err) 166 }