exp.upspin.io@v0.0.0-20230625230448-5076e5b595ec/cmd/upsync/upsync_test.go (about) 1 // Copyright 2019 The Upspin Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package main 6 7 import ( 8 "fmt" 9 "io/ioutil" 10 "os" 11 "testing" 12 13 "upspin.io/bind" 14 "upspin.io/client" 15 "upspin.io/config" 16 "upspin.io/factotum" 17 "upspin.io/log" 18 "upspin.io/test/testutil" 19 "upspin.io/upspin" 20 21 dirserver "upspin.io/dir/inprocess" 22 keyserver "upspin.io/key/inprocess" 23 storeserver "upspin.io/store/inprocess" 24 ) 25 26 // adapted from upspinfs_test.go 27 28 var testConfig struct { 29 syncDir string 30 user string 31 cfg upspin.Config 32 upc upspin.Client 33 } 34 35 const ( 36 perm = 0777 37 maxBytes int64 = 1e8 38 ) 39 40 type testfile struct { 41 path string 42 } 43 44 var testfiles = []testfile{ 45 {"foo"}, 46 {"bar/baz"}, 47 } 48 49 // testSetup creates a temporary user config with inprocess services. 50 func testSetup(name string) (upspin.Config, error) { 51 endpoint := upspin.Endpoint{ 52 Transport: upspin.InProcess, 53 NetAddr: "", // ignored 54 } 55 56 f, err := factotum.NewFromDir(testutil.Repo("key", "testdata", "user1")) // Always use user1's keys. 57 if err != nil { 58 return nil, err 59 } 60 61 cfg := config.New() 62 cfg = config.SetUserName(cfg, upspin.UserName(name)) 63 cfg = config.SetPacking(cfg, upspin.EEPack) 64 cfg = config.SetKeyEndpoint(cfg, endpoint) 65 cfg = config.SetStoreEndpoint(cfg, endpoint) 66 cfg = config.SetDirEndpoint(cfg, endpoint) 67 cfg = config.SetFactotum(cfg, f) 68 69 bind.RegisterKeyServer(upspin.InProcess, keyserver.New()) 70 bind.RegisterStoreServer(upspin.InProcess, storeserver.New()) 71 bind.RegisterDirServer(upspin.InProcess, dirserver.New(cfg)) 72 73 // publicKey := upspin.PublicKey(fmt.Sprintf("key for %s", name)) 74 publicKey := f.PublicKey() 75 user := &upspin.User{ 76 Name: upspin.UserName(name), 77 Dirs: []upspin.Endpoint{cfg.DirEndpoint()}, 78 Stores: []upspin.Endpoint{cfg.StoreEndpoint()}, 79 PublicKey: publicKey, 80 } 81 key, err := bind.KeyServer(cfg, cfg.KeyEndpoint()) 82 if err != nil { 83 return nil, err 84 } 85 err = key.Put(user) 86 return cfg, err 87 } 88 89 func setup() error { 90 // Set up a user config. 91 testConfig.user = "tester@google.com" 92 cfg, err := testSetup(testConfig.user) 93 if err != nil { 94 return err 95 } 96 testConfig.cfg = cfg 97 98 // A directory for locally synced files. 99 testConfig.syncDir, err = ioutil.TempDir("", "upsync") 100 if err != nil { 101 return err 102 } 103 err = os.Chdir(testConfig.syncDir) 104 if err != nil { 105 return err 106 } 107 108 log.SetLevel("info") 109 110 // populate test files in upspin server 111 upc := client.New(cfg) 112 testConfig.upc = upc 113 _, err = upc.MakeDirectory(upspin.PathName(testConfig.user)) 114 if err != nil { 115 return err 116 } 117 _, err = upc.MakeDirectory(upspin.PathName(testConfig.user + "/bar")) 118 if err != nil { 119 return err 120 } 121 for _, f := range testfiles { 122 path := upspin.PathName(testConfig.user + "/" + f.path) 123 _, err := upc.Put(path, []byte(f.path)) 124 if err != nil { 125 return err 126 } 127 } 128 129 return nil 130 } 131 132 func cleanup() { 133 os.RemoveAll(testConfig.syncDir) 134 } 135 136 func TestMain(m *testing.M) { 137 if err := setup(); err != nil { 138 fmt.Fprintf(os.Stderr, "setup failed: %s", err) 139 cleanup() 140 os.Exit(1) 141 } 142 rv := m.Run() 143 cleanup() 144 os.Exit(rv) 145 } 146 147 // TestSync test initial sync of test tree from server. 148 func TestSync(t *testing.T) { 149 upsync(testConfig.upc, testConfig.user, "") 150 fmt.Println(testConfig.syncDir, ":") 151 fi, err := ioutil.ReadDir(testConfig.syncDir) 152 if err != nil { 153 t.Fatal(err) 154 } 155 for _, f := range fi { 156 fmt.Println(f.Name(), f.Size()) 157 } 158 if len(fi) != len(testfiles) { 159 t.Fatalf("expected %d files, saw %d\n", len(testfiles), len(fi)) 160 } 161 }