github.com/janelia-flyem/dvid@v1.0.0/datatype/labelarray/labelidx_test.go (about)

     1  package labelarray
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/janelia-flyem/dvid/datastore"
     7  	"github.com/janelia-flyem/dvid/dvid"
     8  	"github.com/janelia-flyem/dvid/server"
     9  )
    10  
    11  // Stress-test indexing during ingestion handling.
    12  func TestIndexing(t *testing.T) {
    13  	if err := server.OpenTest(); err != nil {
    14  		t.Fatalf("can't open test server: %v\n", err)
    15  	}
    16  	defer server.CloseTest()
    17  
    18  	uuid, _ := datastore.NewTestRepo()
    19  	if len(uuid) < 5 {
    20  		t.Fatalf("Bad root UUID for new repo: %s\n", uuid)
    21  	}
    22  	server.CreateTestInstance(t, uuid, "labelarray", "labels", dvid.Config{})
    23  	d, err := GetByUUIDName(uuid, "labels")
    24  	if err != nil {
    25  		t.Fatal(err)
    26  	}
    27  	v, err := datastore.VersionFromUUID(uuid)
    28  	if err != nil {
    29  		t.Fatal(err)
    30  	}
    31  
    32  	// pretend we are ingesting bvsize x bvsize x bvsize blocks and for labels are tiled in 5x5x5
    33  	// block subvolumes.
    34  	var bvsize, bx, by, bz, numVoxels int32
    35  	bvsize = 10
    36  	numVoxels = 64 * 64 * 64 / 20
    37  	maxLabel := uint64(bvsize*bvsize*bvsize) / 5
    38  	var label uint64
    39  	var changes int
    40  	for bz = 0; bz < bvsize; bz++ {
    41  		for by = 0; by < bvsize; by++ {
    42  			for bx = 0; bx < bvsize; bx++ {
    43  				if bx%5 == 0 {
    44  					label++
    45  				}
    46  				ldm := make(map[uint64]blockDiffMap)
    47  				izyxstr := dvid.ChunkPoint3d{bx, by, bz}.ToIZYXString()
    48  				for i := uint64(0); i < 4; i++ {
    49  					j := label + i*maxLabel
    50  					bdm, found := ldm[j]
    51  					if !found {
    52  						bdm = make(blockDiffMap)
    53  						ldm[j] = bdm
    54  					}
    55  					bdm[izyxstr] = labelDiff{numVoxels, true}
    56  				}
    57  				for label, bdm := range ldm {
    58  					changes++
    59  					ChangeLabelIndex(d, v, label, bdm)
    60  				}
    61  			}
    62  		}
    63  	}
    64  
    65  	// make sure are indexing on disk is correct.
    66  	for label = 1; label <= maxLabel*4; label++ {
    67  		meta, err := GetLabelIndex(d, v, label)
    68  		if err != nil {
    69  			t.Fatalf("label %d had no meta data associated with it\n", label)
    70  		}
    71  		if len(meta.Blocks) != 5 {
    72  			t.Errorf("label %d had %d blocks: %s\n", label, len(meta.Blocks), meta.Blocks)
    73  		}
    74  	}
    75  }