// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package common_test

import (
	"reflect"
	"testing"

	wire "v.io/v23/services/syncbase"
	"v.io/x/ref/services/syncbase/common"
)

var keyPartTests = []struct {
	parts []string
	key   string
}{
	{[]string{"a", "b"}, "a\xfeb"},
	{[]string{"aa", "bb"}, "aa\xfebb"},
	{[]string{"a", "b", "c"}, "a\xfeb\xfec"},
}

func TestJoinKeyParts(t *testing.T) {
	for _, test := range keyPartTests {
		got, want := common.JoinKeyParts(test.parts...), test.key
		if !reflect.DeepEqual(got, want) {
			t.Errorf("%v: got %q, want %q", test.parts, got, want)
		}
	}
}

func TestSplitKeyParts(t *testing.T) {
	for _, test := range keyPartTests {
		got, want := common.SplitKeyParts(test.key), test.parts
		if !reflect.DeepEqual(got, want) {
			t.Errorf("%q: got %v, want %v", test.key, got, want)
		}
	}
}

func TestSplitNKeyParts(t *testing.T) {
	for _, test := range keyPartTests {
		got, want := common.SplitNKeyParts(test.key, 1), []string{test.key}
		if !reflect.DeepEqual(got, want) {
			t.Errorf("%q: got %v, want %v", test.key, got, want)
		}
	}
	for _, test := range keyPartTests {
		// Note, all test cases in keyPartTests have <= 3 parts.
		got, want := common.SplitNKeyParts(test.key, 3), test.parts
		if !reflect.DeepEqual(got, want) {
			t.Errorf("%q: got %v, want %v", test.key, got, want)
		}
	}
}

func TestStripFirstKeyPartOrDie(t *testing.T) {
	tests := []struct {
		in  string
		out string
	}{
		{"a\xfe", ""},
		{"a\xfeb", "b"},
		{"a\xfe\xfe", "\xfe"},
		{"a\xfeb\xfe", "b\xfe"},
		{"a\xfeb\xfec", "b\xfec"},
	}
	for _, test := range tests {
		got, want := common.StripFirstKeyPartOrDie(test.in), test.out
		if !reflect.DeepEqual(got, want) {
			t.Errorf("%q: got %v, want %v", test.in, got, want)
		}
	}
}

func TestFirstKeyPart(t *testing.T) {
	tests := []struct {
		in  string
		out string
	}{
		{"", ""},
		{"a", "a"},
		{"a\xfe", "a"},
		{"a\xfeb", "a"},
		{"\xfe", ""},
		{"\xfeb", ""},
	}
	for _, test := range tests {
		got, want := common.FirstKeyPart(test.in), test.out
		if !reflect.DeepEqual(got, want) {
			t.Errorf("%q: got %v, want %v", test.in, got, want)
		}
	}
}

func TestIsRowKey(t *testing.T) {
	tests := []struct {
		in  string
		out bool
	}{
		{"", false},
		{"a", false},
		{"a\xfe", false},
		{"a\xfeb", false},
		{common.RowPrefix, true},
		{common.RowPrefix + "\xfe", true},
		{common.RowPrefix + "\xfeb", true},
		{common.CollectionPermsPrefix, false},
		{common.CollectionPermsPrefix + "\xfe", false},
		{common.CollectionPermsPrefix + "\xfeb", false},
	}
	for _, test := range tests {
		got, want := common.IsRowKey(test.in), test.out
		if !reflect.DeepEqual(got, want) {
			t.Errorf("%q: got %v, want %v", test.in, got, want)
		}
	}
}

func TestParseRowKey(t *testing.T) {
	tests := []struct {
		key        string
		collection wire.Id
		row        string
		err        bool
	}{
		{common.RowPrefix + "\xfeu\x00c\x00\xferow", wire.Id{"u", "c"}, "row", false},
		{common.RowPrefix + "\xfeu\x00c,d\x00\xferow", wire.Id{"u", "c,d"}, "row", false},
		{common.RowPrefix + "\xfeu\x00c\x00\xferow,x", wire.Id{"u", "c"}, "row,x", false},
		{common.RowPrefix + "\xfeu\x00c,d\x00\xferow,x", wire.Id{"u", "c,d"}, "row,x", false},
		{common.RowPrefix + "\xfeu\x00c\x00\xfe", wire.Id{"u", "c"}, "", false},
		{common.RowPrefix + "\xfe\x00c\x00\xfe", wire.Id{"", "c"}, "", false},
		{common.RowPrefix + "\xfeu\x00\x00\xfe", wire.Id{"u", ""}, "", false},
		{common.RowPrefix + "\xfe\x00\x00\xferow", wire.Id{"", ""}, "row", false},
		{common.RowPrefix + "\xfe\xferow", wire.Id{}, "", true},
		{common.RowPrefix + "\xfe\x00\xferow", wire.Id{}, "", true},
		{common.RowPrefix + "\xfeuc\xfe", wire.Id{}, "", true},
		{common.RowPrefix + "\xfeu\x00c\xfe", wire.Id{}, "", true},
		{common.RowPrefix + "\xfeuc\x00\xfe", wire.Id{}, "", true},
		{common.CollectionPermsPrefix + "\xfeu\x00c\x00\xferow", wire.Id{}, "", true},
		{common.CollectionPermsPrefix + "\xfeu\x00c\x00\xfe", wire.Id{}, "", true},
		{common.CollectionPermsPrefix + "\xfe\xferow", wire.Id{}, "", true},
		{common.CollectionPermsPrefix + "\xfe\xfe", wire.Id{}, "", true},
		{"pfx\xfeu\x00c\x00\xferow", wire.Id{}, "", true},
		{"pfx\xfeu\x00c\x00\xfe", wire.Id{}, "", true},
		{"pfx\xfe\xferow", wire.Id{}, "", true},
		{"pfx\xfe\xfe", wire.Id{}, "", true},
		{"\xfeu\x00c\x00\xferow", wire.Id{}, "", true},
		{"\xfeu\x00c\x00\xfe", wire.Id{}, "", true},
		{"\xfe\xferow", wire.Id{}, "", true},
		{"\xfe\xfe", wire.Id{}, "", true},
		{common.RowPrefix, wire.Id{}, "", true},
		{common.RowPrefix + "\xfeu\x00c", wire.Id{}, "", true},
		{common.RowPrefix + "\xfeuc\x00", wire.Id{}, "", true},
		{common.RowPrefix + "\xfeu\x00c\x00", wire.Id{}, "", true},
		{common.RowPrefix + "\xfe", wire.Id{}, "", true},
	}
	for _, test := range tests {
		collection, row, err := common.ParseRowKey(test.key)
		if !reflect.DeepEqual(collection, test.collection) {
			t.Errorf("%q: got %v, want %v", test.key, collection, test.collection)
		}
		if !reflect.DeepEqual(row, test.row) {
			t.Errorf("%q: got %v, want %v", test.key, row, test.row)
		}
		if !reflect.DeepEqual(err != nil, test.err) {
			t.Errorf("%q: got %v, want %v", test.key, err != nil, test.err)
		}
	}
}

func TestParseCollectionPermsKey(t *testing.T) {
	tests := []struct {
		key        string
		collection wire.Id
		err        bool
	}{
		{common.CollectionPermsPrefix + "\xfeu\x00c\x00\xfe", wire.Id{"u", "c"}, false},
		{common.CollectionPermsPrefix + "\xfeu\x00c,d\x00\xfe", wire.Id{"u", "c,d"}, false},
		{common.CollectionPermsPrefix + "\xfeu\x00\x00\xfe", wire.Id{"u", ""}, false},
		{common.CollectionPermsPrefix + "\xfe\x00c\x00\xfe", wire.Id{"", "c"}, false},
		{common.CollectionPermsPrefix + "\xfe\x00\x00\xfe", wire.Id{"", ""}, false},
		{"\xfeu\x00c\x00\xfe", wire.Id{}, true},
		{"pfx\xfeu\x00c\x00\xfe", wire.Id{}, true},
		{common.RowPrefix + "\xfeu\x00c\x00\xfe", wire.Id{}, true},
		{common.CollectionPermsPrefix + "\xfe", wire.Id{}, true},
		{common.CollectionPermsPrefix + "\xfe\xfe", wire.Id{}, true},
		{common.CollectionPermsPrefix + "\xfe\x00\xfe", wire.Id{}, true},
		{common.CollectionPermsPrefix + "\xfeu\x00c\x00\xferow", wire.Id{}, true},
		{common.CollectionPermsPrefix + "\xfeu\x00c\x00", wire.Id{}, true},
		{common.CollectionPermsPrefix + "\xfeu\x00c", wire.Id{}, true},
		{common.CollectionPermsPrefix + "\xfeuc\x00", wire.Id{}, true},
		{common.CollectionPermsPrefix + "\xfeuc", wire.Id{}, true},
		{common.CollectionPermsPrefix + "\xfe", wire.Id{}, true},
		{common.CollectionPermsPrefix + "\xfe\x00", wire.Id{}, true},
	}
	for _, test := range tests {
		collection, err := common.ParseCollectionPermsKey(test.key)
		if !reflect.DeepEqual(collection, test.collection) {
			t.Errorf("%q: got %v, want %v", test.key, collection, test.collection)
		}
		if !reflect.DeepEqual(err != nil, test.err) {
			t.Errorf("%q: got %v, want %v", test.key, err != nil, test.err)
		}
	}
}

func TestScanPrefixArgs(t *testing.T) {
	tests := []struct {
		stKeyPrefix, prefix, wantStart, wantLimit string
	}{
		{"x", "", "x\xfe", "x\xff"},
		{"x", "a", "x\xfea", "x\xfeb"},
		{"x", "a\xfe", "x\xfea\xfe", "x\xfea\xff"},
	}
	for _, test := range tests {
		start, limit := common.ScanPrefixArgs(test.stKeyPrefix, test.prefix)
		gotStart, gotLimit := string(start), string(limit)
		if gotStart != test.wantStart {
			t.Errorf("{%q, %q} start: got %q, want %q", test.stKeyPrefix, test.prefix, gotStart, test.wantStart)
		}
		if gotLimit != test.wantLimit {
			t.Errorf("{%q, %q} limit: got %q, want %q", test.stKeyPrefix, test.prefix, gotLimit, test.wantLimit)
		}
	}
}

func TestScanRangeArgs(t *testing.T) {
	tests := []struct {
		stKeyPrefix, start, limit, wantStart, wantLimit string
	}{
		{"x", "", "", "x\xfe", "x\xff"},   // limit "" means "no limit"
		{"x", "a", "", "x\xfea", "x\xff"}, // limit "" means "no limit"
		{"x", "a", "b", "x\xfea", "x\xfeb"},
		{"x", "a", "a", "x\xfea", "x\xfea"}, // empty range
		{"x", "b", "a", "x\xfeb", "x\xfea"}, // empty range
	}
	for _, test := range tests {
		start, limit := common.ScanRangeArgs(test.stKeyPrefix, test.start, test.limit)
		gotStart, gotLimit := string(start), string(limit)
		if gotStart != test.wantStart {
			t.Errorf("{%q, %q, %q} start: got %q, want %q", test.stKeyPrefix, test.start, test.limit, gotStart, test.wantStart)
		}
		if gotLimit != test.wantLimit {
			t.Errorf("{%q, %q, %q} limit: got %q, want %q", test.stKeyPrefix, test.start, test.limit, gotLimit, test.wantLimit)
		}
	}
}
