Skip to content
Permalink

Comparing changes

This is a direct comparison between two commits made in this repository or its related repositories. View the default comparison for this range or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: vdaas/vald
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: dbd5e4d490a22d5237fed22f554c2d29e3e6c4db
Choose a base ref
..
head repository: vdaas/vald
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 1836e7d9fcaf170622fa3627cc48232ca5f4ddfb
Choose a head ref
Showing with 679 additions and 235 deletions.
  1. +33 −33 tests/v2/e2e/config/config.go
  2. +5 −81 tests/v2/e2e/crud/crud_test.go
  3. +355 −0 tests/v2/e2e/crud/search_test.go
  4. +286 −108 tests/v2/e2e/crud/strategy_test.go
  5. +0 −13 tests/v2/e2e/crud/unary_test.go
66 changes: 33 additions & 33 deletions tests/v2/e2e/config/config.go
Original file line number Diff line number Diff line change
@@ -92,39 +92,6 @@ type Operation struct {
Wait timeutil.DurationString `yaml:"wait"`
}

type (
StatusCode string
StatusCodes []StatusCode
)

func (sc StatusCode) Bind() StatusCode {
return config.GetActualValue(sc)
}

func (sc StatusCode) Equals(c string) bool {
return strings.EqualFold(sc.String(), StatusCode(c).Bind().String())
}

func (sc StatusCode) String() string {
return string(sc)
}

func (sc StatusCodes) Bind() StatusCodes {
for i, c := range sc {
sc[i] = c.Bind()
}
return sc
}

func (sc StatusCodes) Equals(c string) bool {
for _, s := range sc {
if s.Equals(c) {
return true
}
}
return false
}

type Execution struct {
*BaseConfig `yaml:",inline,omitempty"`
*ModificationConfig `yaml:",inline,omitempty"`
@@ -166,6 +133,39 @@ type ModificationConfig struct {
Timestamp int64 `yaml:"timestamp,omitempty"` // Timestamp value for the operation; used for versioning.
}

type (
StatusCode string
StatusCodes []StatusCode
)

func (sc StatusCode) Bind() StatusCode {
return config.GetActualValue(sc)
}

func (sc StatusCode) Equals(c string) bool {
return strings.EqualFold(sc.String(), StatusCode(c).Bind().String())
}

func (sc StatusCode) String() string {
return string(sc)
}

func (sc StatusCodes) Bind() StatusCodes {
for i, c := range sc {
sc[i] = c.Bind()
}
return sc
}

func (sc StatusCodes) Equals(c string) bool {
for _, s := range sc {
if s.Equals(c) {
return true
}
}
return false
}

type KubernetesAction string

const (
86 changes: 5 additions & 81 deletions tests/v2/e2e/crud/crud_test.go
Original file line number Diff line number Diff line change
@@ -28,6 +28,7 @@ import (

"github.com/vdaas/vald/apis/grpc/v1/payload"
"github.com/vdaas/vald/internal/client/v1/client/vald"
"github.com/vdaas/vald/internal/errors"
"github.com/vdaas/vald/internal/log"
"github.com/vdaas/vald/internal/net/grpc"
"github.com/vdaas/vald/internal/params"
@@ -73,66 +74,19 @@ func TestMain(m *testing.M) {
if err != nil {
log.Fatalf("failed to load config: %v", err)
}

var cancel context.CancelFunc
ctx, cancel = context.WithCancel(context.Background())
defer cancel()

if cfg.Kubernetes.PortForward.Enabled {
kclient, err = k8s.NewClient(cfg.Kubernetes.KubeConfig, "")
if err != nil {
log.Fatalf("failed to create kubernetes client: %v", err)
}
stop, _, err := k8s.Portforward(ctx, kclient,
cfg.Kubernetes.PortForward.Namespace,
cfg.Kubernetes.PortForward.PodName,
cfg.Kubernetes.PortForward.LocalPort,
cfg.Kubernetes.PortForward.TargetPort)
if err != nil {
if stop != nil {
stop()
}
log.Fatalf("failed to portforward: %v", err)
}
defer stop()
}

ds, err = hdf5.HDF5ToDataset(cfg.Dataset.Name)
if err != nil {
log.Fatalf("failed to load dataset: %v", err)
}
client, ctx, err = newClient(ctx, cfg.Metadata)
if err != nil {
log.Fatalf("failed to create client: %v", err)
}
ech, err := client.Start(ctx)
if err != nil {
log.Fatalf("failed to start client: %v", err)
}

go func() {
select {
case <-ctx.Done():
return
case err := <-ech:
if err != nil {
log.Fatalf("client daemon returned error: %v", err)
}
}
}()
defer func() {
err = client.Stop(ctx)
if err != nil {
log.Fatalf("failed to stop client: %v", err)
}
}()

os.Exit(m.Run())
}

func newClient(
ctx context.Context, meta map[string]string,
) (client vald.Client, mctx context.Context, err error) {
if cfg == nil || cfg.Target == nil {
return nil, nil, errors.ErrGRPCTargetAddrNotFound
}
gopts, err := cfg.Target.Opts()
if err != nil {
return nil, nil, err
@@ -152,38 +106,8 @@ func newClient(
}

func sleep(t *testing.T, dur time.Duration) {
t.Helper()
t.Logf("%v sleep for %s.", time.Now(), dur)
time.Sleep(dur)
t.Logf("%v sleep finished.", time.Now())
}

func recall(t *testing.T, resultIDs []string, neighbors []int) (recall float64) {
t.Helper()
ns := map[string]struct{}{}
for _, n := range neighbors {
ns[strconv.Itoa(n)] = struct{}{}
}

for _, r := range resultIDs {
if _, ok := ns[r]; ok {
recall++
}
}

return recall / float64(len(neighbors))
}

func calculateRecall(t *testing.T, res *payload.Search_Response, idx int) (rc float64) {
t.Helper()
topKIDs := make([]string, 0, len(res.GetResults()))
for _, d := range res.GetResults() {
topKIDs = append(topKIDs, d.GetId())
}

if len(topKIDs) == 0 {
t.Errorf("empty result is returned for test ID %s: %#v", res.GetRequestId(), topKIDs)
return
}
rc = recall(t, topKIDs, ds.Neighbors[idx][:len(topKIDs)])
return rc
}
Loading