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  }