github.com/hattya/nazuna@v0.7.1-0.20240331055452-55e14c275c1c/layer_test.go (about) 1 // 2 // nazuna :: layer_test.go 3 // 4 // Copyright (c) 2014-2022 Akinori Hattori <hattya@gmail.com> 5 // 6 // SPDX-License-Identifier: MIT 7 // 8 9 package nazuna_test 10 11 import ( 12 "path/filepath" 13 "reflect" 14 "testing" 15 16 "github.com/hattya/nazuna" 17 ) 18 19 func TestLayer(t *testing.T) { 20 l := &nazuna.Layer{Name: "layer"} 21 if g, e := l.Path(), "layer"; g != e { 22 t.Errorf("Layer.Path() = %v, expected %v", g, e) 23 } 24 25 l.SetAbst(&nazuna.Layer{Name: "abst"}) 26 if g, e := l.Path(), "abst/layer"; g != e { 27 t.Errorf("Layer.Path() = %v, expected %v", g, e) 28 } 29 } 30 31 func TestNewAlias(t *testing.T) { 32 repo := initLayer(t) 33 34 l, err := repo.LayerOf("abst/layer") 35 if err != nil { 36 t.Fatal(err) 37 } 38 if err := l.NewAlias("src", "dst"); err != nil { 39 t.Error(err) 40 } 41 42 if err := l.NewAlias("src", "src"); err == nil { 43 t.Error("expected error") 44 } 45 if err := l.NewAlias("src", "dst"); err == nil { 46 t.Error("expected error") 47 } 48 } 49 50 func TestNewAliasError(t *testing.T) { 51 repo := initLayer(t) 52 53 // abstruct layer 54 l, err := repo.LayerOf("abst") 55 if err != nil { 56 t.Fatal(err) 57 } 58 if err := l.NewAlias("src", "dst"); err == nil { 59 t.Error("expected error") 60 } 61 // already exists: file 62 l, err = repo.LayerOf("abst/layer") 63 if err != nil { 64 t.Fatal(err) 65 } 66 if err := touch(repo.PathFor(l, "dst")); err != nil { 67 t.Fatal(err) 68 } 69 if err := repo.Command("add", "."); err != nil { 70 t.Fatal(err) 71 } 72 if err := l.NewAlias("src", "dst"); err == nil { 73 t.Error("expected error") 74 } 75 // already exists: directory 76 l.Aliases = nil 77 if err := repo.Command("rm", "-rf", "."); err != nil { 78 t.Fatal(err) 79 } 80 if err := mkdir(repo.PathFor(l, "dst")); err != nil { 81 t.Fatal(err) 82 } 83 if err := touch(repo.PathFor(l, filepath.Join("dst", "file"))); err != nil { 84 t.Fatal(err) 85 } 86 if err := repo.Command("add", "."); err != nil { 87 t.Fatal(err) 88 } 89 if err := l.NewAlias("src", "dst"); err != nil { 90 t.Error(err) 91 } 92 } 93 94 func TestNewLink(t *testing.T) { 95 repo := initLayer(t) 96 97 links := map[string][]*nazuna.Link{ 98 "": { 99 {[]string{"path"}, "src", "dst"}, 100 {nil, "a", "z"}, 101 }, 102 } 103 104 l, err := repo.LayerOf("abst/layer") 105 if err != nil { 106 t.Fatal(err) 107 } 108 if _, err := l.NewLink([]string{"path"}, "src", "dst"); err != nil { 109 t.Fatal(err) 110 } 111 if _, err := l.NewLink(nil, "a", "z"); err != nil { 112 t.Fatal(err) 113 } 114 if !reflect.DeepEqual(l.Links, links) { 115 t.Error("expected to sort by Link.Dst") 116 } 117 118 if _, err := l.NewLink([]string{"path"}, "src", "dst"); err == nil { 119 t.Error("expected error") 120 } 121 } 122 123 func TestNewLinkError(t *testing.T) { 124 repo := initLayer(t) 125 126 // abstruct layer 127 l, err := repo.LayerOf("abst") 128 if err != nil { 129 t.Fatal(err) 130 } 131 if _, err := l.NewLink([]string{}, "src", "dst"); err == nil { 132 t.Error("expected error") 133 } 134 // already exists: file 135 l, err = repo.LayerOf("abst/layer") 136 if err != nil { 137 t.Fatal(err) 138 } 139 if err := touch(repo.PathFor(l, "dst")); err != nil { 140 t.Fatal(err) 141 } 142 if err := repo.Command("add", "."); err != nil { 143 t.Fatal(err) 144 } 145 if _, err := l.NewLink([]string{"path"}, "src", "dst"); err == nil { 146 t.Error("expected error") 147 } 148 // already exists: directory 149 l.Links = nil 150 if err := repo.Command("rm", "-rf", "."); err != nil { 151 t.Fatal(err) 152 } 153 if err := mkdir(repo.PathFor(l, "dst")); err != nil { 154 t.Fatal(err) 155 } 156 if err := touch(repo.PathFor(l, filepath.Join("dst", "file"))); err != nil { 157 t.Fatal(err) 158 } 159 if err := repo.Command("add", "."); err != nil { 160 t.Fatal(err) 161 } 162 if _, err := l.NewLink([]string{"path"}, "src", "dst"); err == nil { 163 t.Error("expected error") 164 } 165 } 166 167 func TestNewSubrepo(t *testing.T) { 168 repo := initLayer(t) 169 170 src := "github.com/hattya/nazuna" 171 subrepos := make(map[string][]*nazuna.Subrepo) 172 l, err := repo.LayerOf("abst/layer") 173 if err != nil { 174 t.Fatal(err) 175 } 176 177 subrepos[""] = []*nazuna.Subrepo{ 178 {"a", "z"}, 179 {src, "dst"}, 180 } 181 if _, err := l.NewSubrepo(src, "dst"); err != nil { 182 t.Fatal(err) 183 } 184 if _, err := l.NewSubrepo("a", "z"); err != nil { 185 t.Fatal(err) 186 } 187 if !reflect.DeepEqual(l.Subrepos, subrepos) { 188 t.Error("expected to sort by Subrepo.Src") 189 } 190 191 if _, err := l.NewSubrepo(src, "dst"); err == nil { 192 t.Error("expected error") 193 } 194 195 l.Subrepos = nil 196 subrepos[""] = []*nazuna.Subrepo{ 197 {"a", "z"}, 198 {src, ""}, 199 } 200 if _, err := l.NewSubrepo(src, filepath.Base(src)); err != nil { 201 t.Fatal(err) 202 } 203 if _, err := l.NewSubrepo("a", "z"); err != nil { 204 t.Fatal(err) 205 } 206 if !reflect.DeepEqual(l.Subrepos, subrepos) { 207 t.Error("expected to sort by Subrepo.Src") 208 } 209 210 if _, err := l.NewSubrepo(src, filepath.Base(src)); err == nil { 211 t.Error("expected error") 212 } 213 } 214 215 func TestNewSubrepoError(t *testing.T) { 216 repo := initLayer(t) 217 218 src := "github.com/hattya/nazuna" 219 220 // abstruct layer 221 l, err := repo.LayerOf("abst") 222 if err != nil { 223 t.Fatal(err) 224 } 225 if _, err := l.NewSubrepo(src, "dst"); err == nil { 226 t.Error("expected error") 227 } 228 // already exists: file 229 l, err = repo.LayerOf("abst/layer") 230 if err != nil { 231 t.Fatal(err) 232 } 233 if err := touch(repo.PathFor(l, "dst")); err != nil { 234 t.Fatal(err) 235 } 236 if err := repo.Command("add", "."); err != nil { 237 t.Fatal(err) 238 } 239 if _, err = l.NewSubrepo(src, "dst"); err == nil { 240 t.Error("expected error") 241 } 242 // already exists: directory 243 l.Subrepos = nil 244 if err := repo.Command("rm", "-rf", "."); err != nil { 245 t.Fatal(err) 246 } 247 if err := mkdir(repo.PathFor(l, "dst")); err != nil { 248 t.Fatal(err) 249 } 250 if err := touch(repo.PathFor(l, filepath.Join("dst", "file"))); err != nil { 251 t.Fatal(err) 252 } 253 if err := repo.Command("add", "."); err != nil { 254 t.Fatal(err) 255 } 256 if _, err = l.NewSubrepo(src, "dst"); err == nil { 257 t.Error("expected error") 258 } 259 } 260 261 func initLayer(t *testing.T) *nazuna.Repository { 262 t.Helper() 263 264 repo := init_(t) 265 if _, err := repo.NewLayer("abst/layer"); err != nil { 266 t.Fatal("initLayer:", err) 267 } 268 return repo 269 }