github.com/ndau/noms@v1.0.5/go/config/resolver_test.go (about) 1 // Copyright 2016 Attic Labs, Inc. All rights reserved. 2 // Licensed under the Apache License, version 2.0: 3 // http://www.apache.org/licenses/LICENSE-2.0 4 5 package config 6 7 import ( 8 "fmt" 9 "os" 10 "path/filepath" 11 "testing" 12 13 "github.com/ndau/noms/go/spec" 14 "github.com/stretchr/testify/assert" 15 ) 16 17 const ( 18 localSpec = nbsSpec 19 remoteSpec = httpSpec 20 testDs = "testds" 21 testObject = "#pckdvpvr9br1fie6c3pjudrlthe7na18" 22 ) 23 24 type testData struct { 25 input string 26 expected string 27 } 28 29 var ( 30 rtestRoot = os.TempDir() 31 32 rtestConfig = &Config{ 33 "", 34 map[string]DbConfig{ 35 DefaultDbAlias: {localSpec}, 36 remoteAlias: {remoteSpec}, 37 }, 38 } 39 40 dbTestsNoAliases = []testData{ 41 {localSpec, localSpec}, 42 {remoteSpec, remoteSpec}, 43 } 44 45 dbTestsWithAliases = []testData{ 46 {"", localSpec}, 47 {remoteAlias, remoteSpec}, 48 } 49 50 pathTestsNoAliases = []testData{ 51 {remoteSpec + "::" + testDs, remoteSpec + "::" + testDs}, 52 {remoteSpec + "::" + testObject, remoteSpec + "::" + testObject}, 53 } 54 55 pathTestsWithAliases = []testData{ 56 {testDs, localSpec + "::" + testDs}, 57 {remoteAlias + "::" + testDs, remoteSpec + "::" + testDs}, 58 {testObject, localSpec + "::" + testObject}, 59 {remoteAlias + "::" + testObject, remoteSpec + "::" + testObject}, 60 } 61 ) 62 63 func withConfig(t *testing.T) *Resolver { 64 assert := assert.New(t) 65 dir := filepath.Join(rtestRoot, "with-config") 66 _, err := rtestConfig.WriteTo(dir) 67 assert.NoError(err, dir) 68 assert.NoError(os.Chdir(dir)) 69 r := NewResolver() // resolver must be created after changing directory 70 return r 71 72 } 73 74 func withoutConfig(t *testing.T) *Resolver { 75 assert := assert.New(t) 76 dir := filepath.Join(rtestRoot, "without-config") 77 assert.NoError(os.MkdirAll(dir, os.ModePerm), dir) 78 assert.NoError(os.Chdir(dir)) 79 r := NewResolver() // resolver must be created after changing directory 80 return r 81 } 82 83 func assertPathSpecsEquiv(assert *assert.Assertions, expected string, actual string) { 84 e, err := spec.ForPath(expected) 85 assert.NoError(err) 86 a, err := spec.ForPath(actual) 87 assert.NoError(err) 88 89 databaseSpec := func(sp spec.Spec) string { 90 return fmt.Sprintf("%s:%s", sp.Protocol, sp.DatabaseName) 91 } 92 93 assertDbSpecsEquiv(assert, databaseSpec(e), databaseSpec(a)) 94 assert.Equal(e.Path.String(), a.Path.String()) 95 } 96 97 func TestResolveDatabaseWithConfig(t *testing.T) { 98 r := withConfig(t) 99 assert := assert.New(t) 100 for _, d := range append(dbTestsNoAliases, dbTestsWithAliases...) { 101 db := r.ResolveDbSpec(d.input) 102 assertDbSpecsEquiv(assert, d.expected, db) 103 } 104 } 105 106 func TestResolvePathWithConfig(t *testing.T) { 107 r := withConfig(t) 108 assert := assert.New(t) 109 for _, d := range append(pathTestsNoAliases, pathTestsWithAliases...) { 110 path := r.ResolvePathSpec(d.input) 111 assertPathSpecsEquiv(assert, d.expected, path) 112 } 113 } 114 115 func TestResolveDatabaseWithoutConfig(t *testing.T) { 116 r := withoutConfig(t) 117 assert := assert.New(t) 118 for _, d := range dbTestsNoAliases { 119 db := r.ResolveDbSpec(d.input) 120 assert.Equal(d.expected, db, d.input) 121 } 122 } 123 124 func TestResolvePathWithoutConfig(t *testing.T) { 125 r := withoutConfig(t) 126 assert := assert.New(t) 127 for _, d := range pathTestsNoAliases { 128 path := r.ResolvePathSpec(d.input) 129 assertPathSpecsEquiv(assert, d.expected, path) 130 } 131 132 } 133 134 func TestResolveDestPathWithDot(t *testing.T) { 135 r := withConfig(t) 136 assert := assert.New(t) 137 138 data := []struct { 139 src string 140 dest string 141 expSrc string 142 expDest string 143 }{ 144 {testDs, remoteSpec + "::.", localSpec + "::" + testDs, remoteSpec + "::" + testDs}, 145 {remoteSpec + "::" + testDs, ".", remoteSpec + "::" + testDs, localSpec + "::" + testDs}, 146 } 147 for _, d := range data { 148 src := r.ResolvePathSpec(d.src) 149 dest := r.ResolvePathSpec(d.dest) 150 assertPathSpecsEquiv(assert, d.expSrc, src) 151 assertPathSpecsEquiv(assert, d.expDest, dest) 152 } 153 154 }