github.com/falafeljan/pkger@v0.18.0/pkging/pkgtest/ref.go (about) 1 package pkgtest 2 3 import ( 4 "crypto/rand" 5 "encoding/hex" 6 "io/ioutil" 7 "os" 8 "path/filepath" 9 "runtime" 10 11 "github.com/markbates/pkger/here" 12 ) 13 14 type Ref struct { 15 here.Info 16 root string 17 } 18 19 func NewRef() (*Ref, error) { 20 her, err := here.Package("github.com/markbates/pkger") 21 if err != nil { 22 return nil, err 23 } 24 root := filepath.Join( 25 her.Module.Dir, 26 "pkging", 27 "pkgtest", 28 "testdata", 29 "ref", 30 ) 31 32 return newRef(root) 33 } 34 35 func newRef(root string) (*Ref, error) { 36 if _, err := os.Stat(root); err != nil { 37 return nil, err 38 } 39 40 b := make([]byte, 10) 41 _, err := rand.Read(b) 42 if err != nil { 43 return nil, err 44 } 45 46 dir := filepath.Dir(root) 47 dir = filepath.Join(dir, hex.EncodeToString(b)) 48 49 ref := &Ref{ 50 Info: here.Info{ 51 ImportPath: "app", 52 Dir: dir, 53 Name: "app", 54 Module: here.Module{ 55 Main: true, 56 Path: "app", 57 Dir: dir, 58 GoMod: filepath.Join(dir, "go.mod"), 59 GoVersion: runtime.Version(), 60 }, 61 }, 62 63 root: root, 64 } 65 66 if err := os.MkdirAll(dir, 0755); err != nil { 67 return nil, err 68 } 69 70 for _, n := range []string{"go.mod", "go.sum"} { 71 b, err = ioutil.ReadFile(filepath.Join(root, n)) 72 if err != nil { 73 return nil, err 74 } 75 76 f, err := os.Create(filepath.Join(dir, n)) 77 if err != nil { 78 return nil, err 79 } 80 81 if _, err := f.Write(b); err != nil { 82 return nil, err 83 } 84 85 if err := f.Close(); err != nil { 86 return nil, err 87 } 88 } 89 90 return ref, nil 91 }