1 package httpembed 2 3 import ( 4 "io" 5 "os" 6 "path/filepath" 7 "testing" 8 ) 9 10 func TestDecompressFS(t *testing.T) { 11 c := new(compressor) 12 13 const ( 14 valA = "Hello, World!" 15 valB = "12345ABC" 16 ) 17 dir := t.TempDir() 18 19 bufA, err := c.Compress(valA) 20 if err != nil { 21 t.Errorf("test 1: unexpected error: %s", err) 22 return 23 } 24 25 if err = writeFile(filepath.Join(dir, "a.txt.gz"), bufA); err != nil { 26 t.Errorf("test 3: unexpected error: %s", err) 27 return 28 } 29 30 bufB, err := c.Compress(valB) 31 if err != nil { 32 t.Errorf("test 2: unexpected error: %s", err) 33 return 34 } 35 36 if err = os.Mkdir(filepath.Join(dir, "dir"), os.ModePerm); err != nil { 37 t.Errorf("test 4: unexpected error: %s", err) 38 return 39 } 40 41 if err = writeFile(filepath.Join(dir, "dir", "b.zip.gz"), bufB); err != nil { 42 t.Errorf("test 5: unexpected error: %s", err) 43 return 44 } 45 46 dd, err := DecompressFS(os.DirFS(dir)) 47 if err != nil { 48 t.Errorf("test 6: unexpected error: %s", err) 49 return 50 } 51 52 f, err := dd.Open("a.txt") 53 if err != nil { 54 t.Errorf("test 7: unexpected error: %s", err) 55 return 56 } 57 58 buf, err := io.ReadAll(f) 59 if err != nil { 60 t.Errorf("test 8: unexpected error: %s", err) 61 return 62 } 63 64 if string(buf) != valA { 65 t.Errorf("test 9: expected to read %s, read %s", valA, buf) 66 return 67 } 68 69 f, err = dd.Open("dir/b.zip") 70 if err != nil { 71 t.Errorf("test 10: unexpected error: %s", err) 72 return 73 } 74 75 buf, err = io.ReadAll(f) 76 if err != nil { 77 t.Errorf("test 11: unexpected error: %s", err) 78 return 79 } 80 81 if string(buf) != valB { 82 t.Errorf("test 12: expected to read %s, read %s", valB, buf) 83 return 84 } 85 } 86 87 func writeFile(path string, data []byte) error { 88 f, err := os.Create(path) 89 if err != nil { 90 return err 91 } 92 93 _, err = f.Write(data) 94 if err != nil { 95 return err 96 } 97 98 err = f.Close() 99 if err != nil { 100 return err 101 } 102 103 return nil 104 } 105