// Code used for testing only. package collection import ( "fmt" "git.curoverse.com/arvados.git/sdk/go/blockdigest" ) // TestCollectionSpec with test blocks and desired replication level type TestCollectionSpec struct { // The desired replication level ReplicationLevel int // Blocks this contains, represented by ints. Ints repeated will // still only represent one block Blocks []int } // MakeTestReadCollections creates a ReadCollections object for testing // based on the give specs. Only the ReadAllCollections and UUIDToCollection // fields are populated. To populate other fields call rc.Summarize(). func MakeTestReadCollections(specs []TestCollectionSpec) (rc ReadCollections) { rc = ReadCollections{ ReadAllCollections: true, UUIDToCollection: map[string]Collection{}, } for i, spec := range specs { c := Collection{ UUID: fmt.Sprintf("col%d", i), OwnerUUID: fmt.Sprintf("owner%d", i), ReplicationLevel: spec.ReplicationLevel, BlockDigestToSize: map[blockdigest.BlockDigest]int{}, } rc.UUIDToCollection[c.UUID] = c for _, j := range spec.Blocks { c.BlockDigestToSize[blockdigest.MakeTestBlockDigest(j)] = j } // We compute the size in a separate loop because the value // computed in the above loop would be invalid if c.Blocks // contained duplicates. for _, size := range c.BlockDigestToSize { c.TotalSize += size } } return } // CollectionIndicesForTesting returns a slice giving the collection // index of each collection that was passed in to MakeTestReadCollections. // rc.Summarize() must be called before this method, since Summarize() // assigns an index to each collection. func (rc ReadCollections) CollectionIndicesForTesting() (indices []int) { // TODO(misha): Assert that rc.Summarize() has been called. numCollections := len(rc.CollectionIndexToUUID) indices = make([]int, numCollections) for i := 0; i < numCollections; i++ { indices[i] = rc.CollectionUUIDToIndex[fmt.Sprintf("col%d", i)] } return }