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  }