github.com/janelia-flyem/dvid@v1.0.0/datatype/labelvol/push_test.go (about) 1 package labelvol 2 3 import ( 4 "bytes" 5 "encoding/json" 6 "fmt" 7 "io" 8 "log" 9 "testing" 10 11 "github.com/janelia-flyem/dvid/datastore" 12 "github.com/janelia-flyem/dvid/dvid" 13 "github.com/janelia-flyem/dvid/server" 14 "github.com/janelia-flyem/dvid/storage" 15 ) 16 17 // test ROI has offset (32, 32, 32) and size (64, 64, 64) 18 var testSpans = []dvid.Span{ 19 dvid.Span{1, 1, 1, 2}, dvid.Span{1, 2, 1, 2}, 20 dvid.Span{2, 1, 1, 2}, dvid.Span{2, 2, 1, 2}, 21 } 22 23 func getROIReader() io.Reader { 24 jsonBytes, err := json.Marshal(testSpans) 25 if err != nil { 26 log.Fatalf("Can't encode spans into JSON: %v\n", err) 27 } 28 return bytes.NewReader(jsonBytes) 29 } 30 31 func TestFilter(t *testing.T) { 32 if err := server.OpenTest(); err != nil { 33 t.Fatalf("can't open test server: %v\n", err) 34 } 35 defer server.CloseTest() 36 37 // Create testbed volume and data instances 38 uuid, _ := initTestRepo() 39 var config dvid.Config 40 41 server.CreateTestInstance(t, uuid, "labelblk", "labels", config) 42 d, err := datastore.NewData(uuid, labelvolT, "bodies", config) 43 if err != nil { 44 t.Fatalf("Unable to create labelvol instance: %s\n", err) 45 } 46 server.CreateTestSync(t, uuid, "labels", "bodies") 47 server.CreateTestSync(t, uuid, "bodies", "labels") 48 49 // Populate the labels, which should automatically populate the labelvol 50 _ = createLabelTestVolume(t, uuid, "labels") 51 52 if err := datastore.BlockOnUpdating(uuid, "bodies"); err != nil { 53 t.Fatalf("Error blocking on sync of labels -> bodies: %v\n", err) 54 } 55 56 // Create a ROI that will be used for filter test. 57 server.CreateTestInstance(t, uuid, "roi", "myroi", config) 58 roiRequest := fmt.Sprintf("%snode/%s/myroi/roi", server.WebAPIPath, uuid) 59 server.TestHTTP(t, "POST", roiRequest, getROIReader()) 60 61 // Create the filter spec 62 fs := storage.FilterSpec(fmt.Sprintf("roi:myroi,%s", uuid)) 63 var filter storage.Filter 64 filterer, ok := d.(storage.Filterer) 65 if !ok { 66 t.Fatalf("labelvol instance does not implement storage.Filterer\n") 67 } 68 filter, err = filterer.NewFilter(fs) 69 if err != nil { 70 t.Fatalf("Can't create filter from spec %q: %v\n", fs, err) 71 } 72 if filter == nil { 73 t.Fatalf("No filter could be created from spec %q\n", fs) 74 } 75 76 // Test the filter. 77 tkv := storage.TKeyValue{K: NewTKey(23, dvid.ChunkPoint3d{0, 0, 0}.ToIZYXString())} 78 skip, err := filter.Check(&tkv) 79 if !skip { 80 t.Errorf("Expected filter check 1 to skip, instead filter.Check() returned not skip") 81 } 82 tkv = storage.TKeyValue{K: NewTKey(23, dvid.ChunkPoint3d{1, 1, 1}.ToIZYXString())} 83 skip, err = filter.Check(&tkv) 84 if skip { 85 t.Errorf("Expected filter check 2 to not skip!") 86 } 87 tkv = storage.TKeyValue{K: NewTKey(23, dvid.ChunkPoint3d{2, 1, 2}.ToIZYXString())} 88 skip, err = filter.Check(&tkv) 89 if skip { 90 t.Errorf("Expected filter check 2 to not skip!") 91 } 92 tkv = storage.TKeyValue{K: NewTKey(23, dvid.ChunkPoint3d{3, 1, 1}.ToIZYXString())} 93 skip, err = filter.Check(&tkv) 94 if !skip { 95 t.Errorf("Expected filter check 3 to skip!") 96 } 97 }