Spaces:
Running
Running
File size: 2,520 Bytes
b110593 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
// _ _
// __ _____ __ ___ ___ __ _| |_ ___
// \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \
// \ V V / __/ (_| |\ V /| | (_| | || __/
// \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___|
//
// Copyright © 2016 - 2024 Weaviate B.V. All rights reserved.
//
// CONTACT: [email protected]
//
package stress_tests
import (
"encoding/json"
"fmt"
"sync"
"testing"
"github.com/stretchr/testify/assert"
"github.com/weaviate/weaviate/entities/models"
)
type batch struct {
Objects []*models.Object
}
const class = "TestClass"
func Test_AddConcurrentSchemas_sameObject(t *testing.T) {
url := "http://localhost:8080/v1/"
batch := batch{createObject(class)}
parallelReqs := 10
wg := sync.WaitGroup{}
wg.Add(parallelReqs)
// Add schema and object
c := createHttpClient()
clearExistingObjects(c, url)
requestSchema := createSchemaRequest(url, class, false)
performRequest(c, requestSchema)
for i := 0; i < parallelReqs; i++ {
go func(j int) {
defer wg.Done()
c := createHttpClient()
performRequest(c, createRequest(url+"batch/objects", "POST", batch))
}(i)
}
wg.Wait()
requestRead := createRequest(url+"objects?limit="+fmt.Sprint(10)+"&class="+class, "GET", nil)
_, body, _ := performRequest(c, requestRead)
var result map[string]interface{}
json.Unmarshal(body, &result)
assert.Equal(t, 1, int(result["totalResults"].(float64)))
}
func Test_AddConcurrentBatches_differentObjects(t *testing.T) {
url := "http://localhost:8080/v1/"
parallelReqs := 150
wg := sync.WaitGroup{}
wg.Add(parallelReqs)
// Add schema and object
c := createHttpClient()
clearExistingObjects(c, url)
requestSchema := createSchemaRequest(url, class, false)
performRequest(c, requestSchema)
batch1 := batch{createObject(class)}
batch2 := batch{createObject(class)}
for i := 0; i < parallelReqs; i++ {
go func(j int) {
defer wg.Done()
c := createHttpClient()
if j%2 == 0 {
performRequest(c, createRequest(url+"batch/objects", "POST", batch1))
} else {
performRequest(c, createRequest(url+"batch/objects", "POST", batch2))
}
}(i)
}
wg.Wait()
requestRead := createRequest(url+"objects?limit="+fmt.Sprint(10)+"&class="+class, "GET", nil)
_, body, _ := performRequest(c, requestRead)
var result map[string]interface{}
json.Unmarshal(body, &result)
assert.Equal(t, 2, int(result["totalResults"].(float64)))
clearExistingObjects(c, url)
}
|