From 39102e9152d91553ae868f47bd1ae46443f3adff Mon Sep 17 00:00:00 2001 From: Steve Streeting Date: Thu, 26 Nov 2015 11:46:13 +0000 Subject: [PATCH] Generalise interleaving of test data --- test/git-lfs-test-server-api/main.go | 26 +++++++++++++++++ test/git-lfs-test-server-api/testdownload.go | 30 +++++--------------- 2 files changed, 33 insertions(+), 23 deletions(-) diff --git a/test/git-lfs-test-server-api/main.go b/test/git-lfs-test-server-api/main.go index 072f2be6..ebf4a768 100644 --- a/test/git-lfs-test-server-api/main.go +++ b/test/git-lfs-test-server-api/main.go @@ -243,6 +243,32 @@ func callBatchApi(op string, objs []TestObject) ([]*lfs.ObjectResource, error) { return lfs.Batch(apiobjs, op) } +// Combine 2 slices into one by "randomly" interleaving +// Not actually random, same sequence each time so repeatable +func interleaveTestData(slice1, slice2 []TestObject) []TestObject { + // Predictable sequence, mixin existing & missing semi-randomly + rand.Seed(21) + count := len(slice1) + len(slice2) + ret := make([]TestObject, 0, count) + slice1Idx := 0 + slice2Idx := 0 + for left := count; left > 0; { + for i := rand.Intn(3) + 1; slice1Idx < len(slice1) && i > 0; i-- { + obj := slice1[slice1Idx] + ret = append(ret, obj) + slice1Idx++ + left-- + } + for i := rand.Intn(3) + 1; slice2Idx < len(slice2) && i > 0; i-- { + obj := slice2[slice2Idx] + ret = append(ret, obj) + slice2Idx++ + left-- + } + } + return ret +} + func init() { RootCmd.Flags().StringVarP(&apiUrl, "url", "u", "", "URL of the API (must supply this or --clone)") RootCmd.Flags().StringVarP(&cloneUrl, "clone", "c", "", "Clone URL from which to find API (must supply this or --url)") diff --git a/test/git-lfs-test-server-api/testdownload.go b/test/git-lfs-test-server-api/testdownload.go index 227e2adc..13abd1e6 100644 --- a/test/git-lfs-test-server-api/testdownload.go +++ b/test/git-lfs-test-server-api/testdownload.go @@ -4,7 +4,6 @@ import ( "bytes" "errors" "fmt" - "math/rand" "github.com/github/git-lfs/lfs" ) @@ -72,37 +71,22 @@ func downloadAllMissing(oidsExist, oidsMissing []TestObject) error { func downloadMixed(oidsExist, oidsMissing []TestObject) error { existSet := lfs.NewStringSetWithCapacity(len(oidsExist)) + for _, o := range oidsExist { + existSet.Add(o.Oid) + } missingSet := lfs.NewStringSetWithCapacity(len(oidsMissing)) - - // Predictable sequence, mixin existing & missing semi-randomly - rand.Seed(21) - count := len(oidsExist) + len(oidsMissing) - calloids := make([]TestObject, 0, count) - existIdx := 0 - missingIdx := 0 - for left := count; left > 0; { - for i := rand.Intn(3) + 1; existIdx < len(oidsExist) && i > 0; i-- { - obj := oidsExist[existIdx] - existSet.Add(obj.Oid) - calloids = append(calloids, obj) - existIdx++ - left-- - } - for i := rand.Intn(3) + 1; missingIdx < len(oidsMissing) && i > 0; i-- { - obj := oidsMissing[missingIdx] - missingSet.Add(obj.Oid) - calloids = append(calloids, obj) - missingIdx++ - left-- - } + for _, o := range oidsMissing { + missingSet.Add(o.Oid) } + calloids := interleaveTestData(oidsExist, oidsMissing) retobjs, err := callBatchApi("download", calloids) if err != nil { return err } + count := len(oidsExist) + len(oidsMissing) if len(retobjs) != count { return fmt.Errorf("Incorrect number of returned objects, expected %d, got %d", count, len(retobjs)) }