github.com/bhameyie/otto@v0.2.1-0.20160406174117-16052efa52ec/helper/localaddr/db_test.go (about) 1 package localaddr 2 3 import ( 4 "io" 5 "io/ioutil" 6 "net" 7 "os" 8 "path/filepath" 9 "testing" 10 ) 11 12 func TestDB_upgrade_v1(t *testing.T) { 13 path := testCopyV1(t) 14 defer os.Remove(path) 15 16 // Get the CIDR that this should be in 17 _, cidr, err := net.ParseCIDR("100.64.0.0/10") 18 if err != nil { 19 t.Fatalf("err: %s", err) 20 } 21 22 // Init the DB 23 db := &DB{Path: path} 24 25 // Grab an IP and verify it is in the proper place 26 result, err := db.Next() 27 if err != nil { 28 t.Fatalf("err: %s", err) 29 } 30 if !cidr.Contains(result) { 31 t.Fatal("is not in CIDR") 32 } 33 } 34 35 func TestDB(t *testing.T) { 36 td, err := ioutil.TempDir("", "localaddr") 37 if err != nil { 38 t.Fatalf("err: %s", err) 39 } 40 defer os.RemoveAll(td) 41 42 // We shouldn't collide up to the max number 43 results := make(map[string]struct{}) 44 db := &DB{Path: filepath.Join(td, "addr.db")} 45 for i := 0; i < 254; i++ { 46 result, err := db.Next() 47 if err != nil { 48 t.Fatalf("err: %s", err) 49 } 50 if result.To4() == nil { 51 t.Fatalf("not an IPv4: %s", result) 52 } 53 54 if _, ok := results[result.String()]; ok { 55 t.Fatalf("collision: %s", result) 56 } 57 58 results[result.String()] = struct{}{} 59 } 60 } 61 62 func testCopyV1(t *testing.T) string { 63 td, err := ioutil.TempDir("", "localaddr") 64 if err != nil { 65 t.Fatalf("err: %s", err) 66 } 67 defer os.RemoveAll(td) 68 path := filepath.Join(td, "addr.db") 69 70 // Copy the v1 DB so we don't modify it directly 71 src, err := os.Open("./test-fixtures/v1.db") 72 if err != nil { 73 t.Fatalf("err: %s", err) 74 } 75 76 dst, err := os.Create(path) 77 if err != nil { 78 src.Close() 79 t.Fatalf("err: %s", err) 80 } 81 82 _, err = io.Copy(dst, src) 83 src.Close() 84 dst.Close() 85 if err != nil { 86 t.Fatalf("err: %s", err) 87 } 88 89 return path 90 }