github.com/aarzilli/tools@v0.0.0-20151123112009-0d27094f75e0/os/fsi/tests/suite2_test.go (about) 1 // +build suite2 2 // go test -tags=suite2 3 4 package tests 5 6 // Copyright © 2014 Steve Francia <spf@spf13.com>. 7 // Copyright 2009 The Go Authors. All rights reserved. 8 // 9 // Licensed under the Apache License, Version 2.0 (the "License"); 10 // you may not use this file except in compliance with the License. 11 // You may obtain a copy of the License at 12 // http://www.apache.org/licenses/LICENSE-2.0 13 // 14 // Unless required by applicable law or agreed to in writing, software 15 // distributed under the License is distributed on an "AS IS" BASIS, 16 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 // See the License for the specific language governing permissions and 18 // limitations under the License. 19 20 import ( 21 "bytes" 22 "io" 23 "os" 24 "syscall" 25 "testing" 26 ) 27 28 func TestTruncate(t *testing.T) { 29 30 Fss, c := initFileSystems() 31 defer c.Close() 32 for _, fs := range Fss { 33 f := newFile("TestTruncate", fs, t) 34 defer fs.Remove(f.Name()) 35 defer f.Close() 36 37 checkSize(t, f, 0) 38 f.Write([]byte("hello, world\n")) 39 checkSize(t, f, 13) 40 f.Truncate(10) 41 checkSize(t, f, 10) 42 f.Truncate(1024) 43 checkSize(t, f, 1024) 44 f.Truncate(0) 45 checkSize(t, f, 0) 46 _, err := f.Write([]byte("surprise!")) 47 if err == nil { 48 checkSize(t, f, 13+9) // wrote at offset past where hello, world was. 49 } 50 } 51 } 52 53 func TestSeek(t *testing.T) { 54 55 Fss, c := initFileSystems() 56 defer c.Close() 57 for _, fs := range Fss { 58 f := newFile("TestSeek", fs, t) 59 defer fs.Remove(f.Name()) 60 defer f.Close() 61 62 const data = "hello, world\n" 63 io.WriteString(f, data) 64 65 type test struct { 66 in int64 67 whence int 68 out int64 69 } 70 var tests = []test{ 71 {0, 1, int64(len(data))}, 72 {0, 0, 0}, 73 {5, 0, 5}, 74 {0, 2, int64(len(data))}, 75 {0, 0, 0}, 76 {-1, 2, int64(len(data)) - 1}, 77 {1 << 33, 0, 1 << 33}, 78 {1 << 33, 2, 1<<33 + int64(len(data))}, 79 } 80 for i, tt := range tests { 81 off, err := f.Seek(tt.in, tt.whence) 82 if off != tt.out || err != nil { 83 if e, ok := err.(*os.PathError); ok && e.Err == syscall.EINVAL && tt.out > 1<<32 { 84 // Reiserfs rejects the big seeks. 85 // http://code.google.com/p/go/issues/detail?id=91 86 break 87 } 88 t.Errorf("#%d: Seek(%v, %v) = %v, %v want %v, nil", i, tt.in, tt.whence, off, err, tt.out) 89 } 90 } 91 } 92 } 93 94 func TestReadAt(t *testing.T) { 95 96 Fss, c := initFileSystems() 97 defer c.Close() 98 for _, fs := range Fss { 99 f := newFile("TestReadAt", fs, t) 100 defer fs.Remove(f.Name()) 101 defer f.Close() 102 103 const data = "hello, world\n" 104 io.WriteString(f, data) 105 106 b := make([]byte, 5) 107 n, err := f.ReadAt(b, 7) 108 if err != nil || n != len(b) { 109 t.Fatalf("ReadAt 7: %d, %v", n, err) 110 } 111 if string(b) != "world" { 112 t.Fatalf("ReadAt 7: have %q want %q", string(b), "world") 113 } 114 } 115 } 116 117 func TestWriteAt(t *testing.T) { 118 119 Fss, c := initFileSystems() 120 defer c.Close() 121 for _, fs := range Fss { 122 123 f := newFile("TestWriteAt", fs, t) 124 defer fs.Remove(f.Name()) 125 defer f.Close() 126 127 const data = "hello, world\n" 128 io.WriteString(f, data) 129 130 n, err := f.WriteAt([]byte("WORLD"), 7) 131 if err != nil || n != 5 { 132 t.Fatalf("WriteAt 7: %d, %v", n, err) 133 } 134 135 err = f.Close() 136 if err != nil { 137 t.Fatalf("Closing file %v: %v", f.Name(), err) 138 } 139 // log.Printf(" Saved file %v", f.Name()) 140 141 f2, err := fs.Open(f.Name()) 142 if err != nil { 143 t.Fatalf("Reopening file %v: %v", f.Name(), err) 144 } 145 defer f2.Close() 146 147 // log.Printf("so far 4 %v", fs.Name()) 148 149 buf := new(bytes.Buffer) 150 buf.ReadFrom(f2) 151 b := buf.Bytes() 152 153 if err != nil { 154 t.Fatalf("%v: ReadFile %s: %v", fs.Name(), f.Name(), err) 155 } 156 if string(b) != "hello, WORLD\n" { 157 t.Fatalf("after write: have %q want %q", string(b), "hello, WORLD\n") 158 } 159 160 } 161 } 162 163 //func TestReaddirnames(t *testing.T) { 164 //for _, fs := range Fss { 165 //testReaddirnames(fs, ".", dot, t) 166 ////testReaddirnames(sysdir.name, fs, sysdir.files, t) 167 //} 168 //} 169 170 //func TestReaddir(t *testing.T) { 171 //for _, fs := range Fss { 172 //testReaddir(fs, ".", dot, t) 173 ////testReaddir(sysdir.name, fs, sysdir.files, t) 174 //} 175 //}