Mercurial > yakumo_izuru > aya
comparison zs_build_test.go @ 16:be58ace6edae draft
added integration test for build procedure
author | zaitsev.serge |
---|---|
date | Sat, 29 Aug 2015 13:28:15 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
15:a9c42bd52f64 | 16:be58ace6edae |
---|---|
1 package main | |
2 | |
3 import ( | |
4 "crypto/md5" | |
5 "encoding/hex" | |
6 "io" | |
7 "io/ioutil" | |
8 "os" | |
9 "path/filepath" | |
10 "strings" | |
11 "testing" | |
12 ) | |
13 | |
14 const TESTDIR = ".test" | |
15 | |
16 func TestBuild(t *testing.T) { | |
17 files, _ := ioutil.ReadDir("testdata") | |
18 for _, f := range files { | |
19 if f.IsDir() { | |
20 testBuild(filepath.Join("testdata", f.Name()), t) | |
21 } | |
22 } | |
23 } | |
24 | |
25 func testBuild(path string, t *testing.T) { | |
26 wd, _ := os.Getwd() | |
27 os.Chdir(path) | |
28 args := os.Args[:] | |
29 os.Args = []string{"zs", "build"} | |
30 t.Log("--- BUILD", path) | |
31 main() | |
32 | |
33 compare(PUBDIR, TESTDIR, t) | |
34 | |
35 os.Chdir(wd) | |
36 os.Args = args | |
37 } | |
38 | |
39 func compare(pub, test string, t *testing.T) { | |
40 a := md5dir(pub) | |
41 b := md5dir(test) | |
42 for k, v := range a { | |
43 if s, ok := b[k]; !ok { | |
44 t.Error("Unexpected file:", k, v) | |
45 } else if s != v { | |
46 t.Error("Different file:", k, v, s) | |
47 } else { | |
48 t.Log("Matching file", k, v) | |
49 } | |
50 } | |
51 for k, v := range b { | |
52 if _, ok := a[k]; !ok { | |
53 t.Error("Missing file:", k, v) | |
54 } | |
55 } | |
56 } | |
57 | |
58 func md5dir(path string) map[string]string { | |
59 files := map[string]string{} | |
60 filepath.Walk(path, func(s string, info os.FileInfo, err error) error { | |
61 if err == nil && !info.IsDir() { | |
62 if f, err := os.Open(s); err == nil { | |
63 defer f.Close() | |
64 hash := md5.New() | |
65 io.Copy(hash, f) | |
66 files[strings.TrimPrefix(s, path)] = hex.EncodeToString(hash.Sum(nil)) | |
67 } | |
68 } | |
69 return nil | |
70 }) | |
71 return files | |
72 } |