package s3 import ( "io" "testing" "time" "github.com/matryer/is" "github.com/spf13/afero" ) func TestFsListBuckets(t *testing.T) { is := is.New(t) fs, err := newTestFs() is.NoErr(err) buckets, err := testListBuckets(fs) is.NoErr(err) is.Equal(len(buckets), 1) } func TestFsMkdir(t *testing.T) { is := is.New(t) fs, err := newTestFs() is.NoErr(err) err = fs.Mkdir("test", 0o644) is.Equal(err, ErrUnsupported) } func TestFsMkdirAll(t *testing.T) { is := is.New(t) fs, err := newTestFs() is.NoErr(err) err = fs.MkdirAll("test1/test2", 0o644) is.Equal(err, ErrUnsupported) } func TestFsChmod(t *testing.T) { is := is.New(t) fs, err := newTestFs() is.NoErr(err) err = fs.Chmod("test", 0o644) is.Equal(err, ErrUnsupported) } func TestFsChown(t *testing.T) { is := is.New(t) fs, err := newTestFs() is.NoErr(err) err = fs.Chown("test", 1000, 1000) is.Equal(err, ErrUnsupported) } func TestFsChtimes(t *testing.T) { is := is.New(t) fs, err := newTestFs() is.NoErr(err) now := time.Now() err = fs.Chtimes("test", now, now) is.Equal(err, ErrUnsupported) } func TestFsStat(t *testing.T) { is := is.New(t) fs, err := newTestFs() is.NoErr(err) info, err := fs.Stat("dir/file") is.NoErr(err) is.Equal(info.Name(), "file") } func TestFsStatNoExist(t *testing.T) { is := is.New(t) fs, err := newTestFs() is.NoErr(err) _, err = fs.Stat("dir/non-existent") is.Equal(err, afero.ErrFileNotFound) } func TestFsOpenRead(t *testing.T) { is := is.New(t) fs, err := newTestFs() is.NoErr(err) f, err := fs.Open("dir/file") is.NoErr(err) defer f.Close() b, err := io.ReadAll(f) is.NoErr(err) is.Equal(b, []byte("test")) } func newTestFs() (*Fs, error) { fs, err := NewFsFromURL("http://testuser:testsecret@127.0.0.1:9000/test-bucket") return fs, err } func testListBuckets(fs *Fs) ([]string, error) { ctx, cancel := fs.contextWithTimeout() defer cancel() bucketInfos, err := fs.client.ListBuckets(ctx) if err != nil { return nil, err } buckets := make([]string, 0, len(bucketInfos)) for _, bi := range bucketInfos { buckets = append(buckets, bi.Name) } return buckets, nil }