github.com/keybase/client/go@v0.0.0-20240309051027-028f7c731f8b/kbfs/kbfsmd/root_metadata_test.go (about) 1 // Copyright 2016 Keybase Inc. All rights reserved. 2 // Use of this source code is governed by a BSD 3 // license that can be found in the LICENSE file. 4 5 package kbfsmd 6 7 import ( 8 "reflect" 9 "runtime" 10 "strings" 11 "testing" 12 ) 13 14 var testMetadataVers = []MetadataVer{ 15 InitialExtraMetadataVer, SegregatedKeyBundlesVer, 16 } 17 18 // runTestOverMetadataVers runs the given test function over all 19 // metadata versions to test. The test is assumed to be parallelizable 20 // with other instances of itself. Example use: 21 // 22 // func TestFoo(t *testing.T) { 23 // runTestOverMetadataVers(t, testFoo) 24 // } 25 // 26 // func testFoo(t *testing.T, ver MetadataVer) { 27 // ... 28 // brmd, err := MakeInitialRootMetadata(ver, ...) 29 // ... 30 // } 31 func runTestOverMetadataVers( 32 t *testing.T, f func(t *testing.T, ver MetadataVer)) { 33 for _, ver := range testMetadataVers { 34 ver := ver // capture range variable. 35 t.Run(ver.String(), func(t *testing.T) { 36 f(t, ver) 37 }) 38 } 39 } 40 41 // runTestsOverMetadataVers runs the given list of test functions over 42 // all metadata versions to test. prefix should be the common prefix 43 // for all the test function names, and the names of the subtest will 44 // be taken to be the strings after that prefix. Example use: 45 // 46 // func TestFoo(t *testing.T) { 47 // tests := []func(*testing.T, MetadataVer){ 48 // testFooBar1, 49 // testFooBar2, 50 // testFooBar3, 51 // ... 52 // } 53 // runTestsOverMetadataVers(t, "testFoo", tests) 54 // } 55 func runTestsOverMetadataVers(t *testing.T, prefix string, 56 fs []func(t *testing.T, ver MetadataVer)) { 57 for _, f := range fs { 58 f := f // capture range variable. 59 name := runtime.FuncForPC(reflect.ValueOf(f).Pointer()).Name() 60 i := strings.LastIndex(name, prefix) 61 if i >= 0 { 62 i += len(prefix) 63 } else { 64 i = 0 65 } 66 name = name[i:] 67 t.Run(name, func(t *testing.T) { 68 runTestOverMetadataVers(t, f) 69 }) 70 } 71 }