github.com/stffabi/git-lfs@v2.3.5-0.20180214015214-8eeaa8d88902+incompatible/test/git-lfs-test-server-api/testdownload.go (about) 1 package main 2 3 import ( 4 "bytes" 5 "errors" 6 "fmt" 7 8 "github.com/git-lfs/git-lfs/tools" 9 "github.com/git-lfs/git-lfs/tq" 10 ) 11 12 // "download" - all present 13 func downloadAllExist(manifest *tq.Manifest, oidsExist, oidsMissing []TestObject) error { 14 retobjs, err := callBatchApi(manifest, tq.Download, oidsExist) 15 16 if err != nil { 17 return err 18 } 19 20 if len(retobjs) != len(oidsExist) { 21 return fmt.Errorf("Incorrect number of returned objects, expected %d, got %d", len(oidsExist), len(retobjs)) 22 } 23 24 var errbuf bytes.Buffer 25 for _, o := range retobjs { 26 rel, _ := o.Rel("download") 27 if rel == nil { 28 errbuf.WriteString(fmt.Sprintf("Missing download link for %s\n", o.Oid)) 29 } 30 } 31 32 if errbuf.Len() > 0 { 33 return errors.New(errbuf.String()) 34 } 35 36 return nil 37 } 38 39 // "download" - all missing (test includes 404 error entry) 40 func downloadAllMissing(manifest *tq.Manifest, oidsExist, oidsMissing []TestObject) error { 41 retobjs, err := callBatchApi(manifest, tq.Download, oidsMissing) 42 43 if err != nil { 44 return err 45 } 46 47 if len(retobjs) != len(oidsMissing) { 48 return fmt.Errorf("Incorrect number of returned objects, expected %d, got %d", len(oidsMissing), len(retobjs)) 49 } 50 51 var errbuf bytes.Buffer 52 for _, o := range retobjs { 53 link, _ := o.Rel("download") 54 if link != nil { 55 errbuf.WriteString(fmt.Sprintf("Download link should not exist for %s, was %+v\n", o.Oid, link)) 56 } 57 if o.Error == nil { 58 errbuf.WriteString(fmt.Sprintf("Download should include an error for missing object %s\n", o.Oid)) 59 } else if o.Error.Code != 404 { 60 errbuf.WriteString(fmt.Sprintf("Download error code for missing object %s should be 404, got %d\n", o.Oid, o.Error.Code)) 61 } 62 } 63 64 if errbuf.Len() > 0 { 65 return errors.New(errbuf.String()) 66 } 67 68 return nil 69 } 70 71 // "download" - mixture 72 func downloadMixed(manifest *tq.Manifest, oidsExist, oidsMissing []TestObject) error { 73 existSet := tools.NewStringSetWithCapacity(len(oidsExist)) 74 for _, o := range oidsExist { 75 existSet.Add(o.Oid) 76 } 77 missingSet := tools.NewStringSetWithCapacity(len(oidsMissing)) 78 for _, o := range oidsMissing { 79 missingSet.Add(o.Oid) 80 } 81 82 calloids := interleaveTestData(oidsExist, oidsMissing) 83 retobjs, err := callBatchApi(manifest, tq.Download, calloids) 84 85 if err != nil { 86 return err 87 } 88 89 count := len(oidsExist) + len(oidsMissing) 90 if len(retobjs) != count { 91 return fmt.Errorf("Incorrect number of returned objects, expected %d, got %d", count, len(retobjs)) 92 } 93 94 var errbuf bytes.Buffer 95 for _, o := range retobjs { 96 link, _ := o.Rel("download") 97 if missingSet.Contains(o.Oid) { 98 if link != nil { 99 errbuf.WriteString(fmt.Sprintf("Download link should not exist for %s, was %+v\n", o.Oid, link)) 100 } 101 if o.Error == nil { 102 errbuf.WriteString(fmt.Sprintf("Download should include an error for missing object %s", o.Oid)) 103 } else if o.Error.Code != 404 { 104 errbuf.WriteString(fmt.Sprintf("Download error code for missing object %s should be 404, got %d\n", o.Oid, o.Error.Code)) 105 } 106 } 107 if existSet.Contains(o.Oid) && link == nil { 108 errbuf.WriteString(fmt.Sprintf("Missing download link for %s\n", o.Oid)) 109 } 110 111 } 112 113 if errbuf.Len() > 0 { 114 return errors.New(errbuf.String()) 115 } 116 117 return nil 118 119 } 120 121 func init() { 122 addTest("Test download: all existing", downloadAllExist) 123 addTest("Test download: all missing", downloadAllMissing) 124 addTest("Test download: mixed", downloadMixed) 125 }