github.com/fawick/restic@v0.1.1-0.20171126184616-c02923fbfc79/internal/repository/parallel_test.go (about) 1 package repository_test 2 3 import ( 4 "context" 5 "math/rand" 6 "testing" 7 "time" 8 9 "github.com/restic/restic/internal/errors" 10 "github.com/restic/restic/internal/restic" 11 12 "github.com/restic/restic/internal/repository" 13 rtest "github.com/restic/restic/internal/test" 14 ) 15 16 type testIDs []string 17 18 var lister = testIDs{ 19 "40bb581cd36de952985c97a3ff6b21df41ee897d4db2040354caa36a17ff5268", 20 "2e15811a4d14ffac66d36a9ff456019d8de4c10c949d45b643f8477d17e92ff3", 21 "70c11b3ed521ad6b76d905c002ca98b361fca06aca060a063432c7311155a4da", 22 "8056a33e75dccdda701b6c989c7ed0cb71bbb6da13c6427fe5986f0896cc91c0", 23 "79d8776200596aa0237b10d470f7b850b86f8a1a80988ef5c8bee2874ce992e2", 24 "f9f1f29791c6b79b90b35efd083f17a3b163bbbafb1a2fdf43d46d56cffda289", 25 "3834178d05d0f6dd07f872ee0262ff1ace0f0f375768227d3c902b0b66591369", 26 "66d5cc68c9186414806f366ae5493ce7f229212993750a4992be4030f6af28c5", 27 "ebca5af4f397944f68cd215e3dfa2b197a7ba0f7c17d65d9f7390d0a15cde296", 28 "d4511ce6ff732d106275a57e40745c599e987c0da44c42cddbef592aac102437", 29 "f366202f0bfeefaedd7b49e2f21a90d3cbddb97d257a74d788dd34e19a684dae", 30 "a5c17728ab2433cd50636dd5c6c7068c7a44f2999d09c46e8f528466da8a059d", 31 "bae0f9492b9b208233029b87692a1a55cbd7fbe1cf3f6d7bc693ac266a6d6f0e", 32 "9d500187913c7510d71d1902703d312c7aaa56f1e98351385b9535fdabae595e", 33 "ffbddd8a4c1e54d258bb3e16d3929b546b61af63cb560b3e3061a8bef5b24552", 34 "201bb3abf655e7ef71e79ed4fb1079b0502b5acb4d9fad5e72a0de690c50a386", 35 "08eb57bbd559758ea96e99f9b7688c30e7b3bcf0c4562ff4535e2d8edeffaeed", 36 "e50b7223b04985ff38d9e11d1cba333896ef4264f82bd5d0653a028bce70e542", 37 "65a9421cd59cc7b7a71dcd9076136621af607fb4701d2e5c2af23b6396cf2f37", 38 "995a655b3521c19b4d0c266222266d89c8fc62889597d61f45f336091e646d57", 39 "51ec6f0bce77ed97df2dd7ae849338c3a8155a057da927eedd66e3d61be769ad", 40 "7b3923a0c0666431efecdbf6cb171295ec1710b6595eebcba3b576b49d13e214", 41 "2cedcc3d14698bea7e4b0546f7d5d48951dd90add59e6f2d44b693fd8913717d", 42 "fd6770cbd54858fdbd3d7b4239b985e5599180064d93ca873f27e86e8407d011", 43 "9edc51d8e6e04d05c9757848c1bfbfdc8e86b6330982294632488922e59fdb1b", 44 "1a6c4fbb24ad724c968b2020417c3d057e6c89e49bdfb11d91006def65eab6a0", 45 "cb3b29808cd0adfa2dca1f3a04f98114fbccf4eb487cdd4022f49bd70eeb049b", 46 "f55edcb40c619e29a20e432f8aaddc83a649be2c2d1941ccdc474cd2af03d490", 47 "e8ccc1763a92de23566b95c3ad1414a098016ece69a885fc8a72782a7517d17c", 48 "0fe2e3db8c5a12ad7101a63a0fffee901be54319cfe146bead7aec851722f82d", 49 "36be45a6ae7c95ad97cee1b33023be324bce7a7b4b7036e24125679dd9ff5b44", 50 "1685ed1a57c37859fbef1f7efb7509f20b84ec17a765605de43104d2fa37884b", 51 "9d83629a6a004c505b100a0b5d0b246833b63aa067aa9b59e3abd6b74bc4d3a8", 52 "be49a66b60175c5e2ee273b42165f86ef11bb6518c1c79950bcd3f4c196c98bd", 53 "0fd89885d821761b4a890782908e75793028747d15ace3c6cbf0ad56582b4fa5", 54 "94a767519a4e352a88796604943841fea21429f3358b4d5d55596dbda7d15dce", 55 "8dd07994afe6e572ddc9698fb0d13a0d4c26a38b7992818a71a99d1e0ac2b034", 56 "f7380a6f795ed31fbeb2945c72c5fd1d45044e5ab152311e75e007fa530f5847", 57 "5ca1ce01458e484393d7e9c8af42b0ff37a73a2fee0f18e14cff0fb180e33014", 58 "8f44178be3fe0a2bd41f922576fb7a9b19d589754504be746f56c759df328fda", 59 "12d33847c2be711c989f37360dd7aa8537fd14972262a4530634a08fdf32a767", 60 "31e077f5080f78846a00093caff2b6b839519cc47516142eeba9c41d4072a605", 61 "14f01db8a0054e70222b76d2555d70114b4bf8a0f02084324af2df226f14a795", 62 "7f5dbbaf31b4551828e8e76cef408375db9fbcdcdb6b5949f2d1b0c4b8632132", 63 "42a5d9b9bb7e4a16f23ba916bcf87f38c1aa1f2de2ab79736f725850a8ff6a1b", 64 "e06f8f901ea708beba8712a11b6e2d0be7c4b018d0254204ef269bcdf5e8c6cc", 65 "d9ba75785bf45b0c4fd3b2365c968099242483f2f0d0c7c20306dac11fae96e9", 66 "428debbb280873907cef2ec099efe1566e42a59775d6ec74ded0c4048d5a6515", 67 "3b51049d4dae701098e55a69536fa31ad2be1adc17b631a695a40e8a294fe9c0", 68 "168f88aa4b105e9811f5f79439cc1a689be4eec77f3361d42f22fe8f7ddc74a9", 69 "0baa0ab2249b33d64449a899cb7bd8eae5231f0d4ff70f09830dc1faa2e4abee", 70 "0c3896d346b580306a49de29f3a78913a41e14b8461b124628c33a64636241f2", 71 "b18313f1651c15e100e7179aa3eb8ffa62c3581159eaf7f83156468d19781e42", 72 "996361f7d988e48267ccc7e930fed4637be35fe7562b8601dceb7a32313a14c8", 73 "dfb4e6268437d53048d22b811048cd045df15693fc6789affd002a0fc80a6e60", 74 "34dd044c228727f2226a0c9c06a3e5ceb5e30e31cb7854f8fa1cde846b395a58", 75 } 76 77 func (tests testIDs) List(ctx context.Context, t restic.FileType) <-chan string { 78 ch := make(chan string) 79 80 go func() { 81 defer close(ch) 82 83 for i := 0; i < 500; i++ { 84 for _, id := range tests { 85 select { 86 case ch <- id: 87 case <-ctx.Done(): 88 return 89 } 90 } 91 } 92 }() 93 94 return ch 95 } 96 97 func TestFilesInParallel(t *testing.T) { 98 f := func(ctx context.Context, id string) error { 99 time.Sleep(1 * time.Millisecond) 100 return nil 101 } 102 103 for n := uint(1); n < 5; n++ { 104 err := repository.FilesInParallel(context.TODO(), lister, restic.DataFile, n*100, f) 105 rtest.OK(t, err) 106 } 107 } 108 109 var errTest = errors.New("test error") 110 111 func TestFilesInParallelWithError(t *testing.T) { 112 113 f := func(ctx context.Context, id string) error { 114 time.Sleep(1 * time.Millisecond) 115 116 if rand.Float32() < 0.01 { 117 return errTest 118 } 119 120 return nil 121 } 122 123 for n := uint(1); n < 5; n++ { 124 err := repository.FilesInParallel(context.TODO(), lister, restic.DataFile, n*100, f) 125 rtest.Equals(t, errTest, err) 126 } 127 }