Skip to content

Commit

Permalink
refactor unit test and add mem delimiter support
Browse files Browse the repository at this point in the history
  • Loading branch information
zhijian-pro committed Sep 27, 2022
1 parent 284bb4d commit f6694dd
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 10 deletions.
26 changes: 23 additions & 3 deletions pkg/object/mem.go
Original file line number Diff line number Diff line change
Expand Up @@ -130,16 +130,36 @@ func (m *memStore) Delete(key string) error {
}

func (m *memStore) List(prefix, marker, delimiter string, limit int64) ([]Object, error) {
if delimiter != "" {
return nil, notSupportedDelimiter
}
m.Lock()
defer m.Unlock()

objs := make([]Object, 0)
var exist = make(map[string]struct{})
for k := range m.objects {
if strings.HasPrefix(k, prefix) && k > marker {
o := m.objects[k]
if delimiter != "" {
noPrefixKey := strings.TrimPrefix(k, prefix)
if strings.Contains(noPrefixKey, delimiter) {
commonPrefix := prefix + noPrefixKey[:strings.Index(noPrefixKey, delimiter)+1]
if _, ok := exist[commonPrefix]; !ok {
objs = append(objs, &file{
obj{
commonPrefix,
0,
time.Unix(0, 0),
true,
},
o.owner,
o.group,
o.mode,
false,
})
exist[commonPrefix] = struct{}{}
}
continue
}
}
f := &file{
obj{
k,
Expand Down
32 changes: 25 additions & 7 deletions pkg/object/object_storage_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -172,21 +172,38 @@ func testStorage(t *testing.T, s ObjectStorage) {
}
}

defer s.Delete("a/a")
if err := s.Put("a/a", bytes.NewReader(br)); err != nil {
t.Fatalf("PUT failed: %s", err.Error())
}
defer s.Delete("a/a")
if err := s.Put("b/b", bytes.NewReader(br)); err != nil {
defer s.Delete("a/a1")
if err := s.Put("a/a1", bytes.NewReader(br)); err != nil {
t.Fatalf("PUT failed: %s", err.Error())
}
defer s.Delete("b/b")
if obs, err := s.List("", "", "/", 10); err != nil && !errors.Is(err, notSupported) {
if err := s.Put("b/b", bytes.NewReader(br)); err != nil {
t.Fatalf("PUT failed: %s", err.Error())
}
defer s.Delete("b/b1")
if err := s.Put("b/b1", bytes.NewReader(br)); err != nil {
t.Fatalf("PUT failed: %s", err.Error())
}
defer s.Delete("c/")
if err := s.Put("c/", bytes.NewReader(nil)); err != nil {
t.Fatalf("PUT failed: %s", err.Error())
}
if obs, err := s.List("", "", "/", 10); err != nil && !errors.Is(err, notSupportedDelimiter) {
t.Fatalf("list with delimiter: %s", err)
} else if len(obs) != 3 {
} else {
if len(obs) != 4 {
t.Fatalf("list with delimiter should return four results but got %d", len(obs))
}
keys := []string{"a/", "b/", "c/", "test"}
for i, o := range obs {
t.Logf("%d %s", i, o.Key())
if o.Key() != keys[i] {
t.Fatalf("should get key %s but got %s", keys[i], o.Key())
}
}
t.Fatalf("list with delimiter returned: %d %+v", len(obs), obs)
}

// test redis cluster list all api
Expand Down Expand Up @@ -353,6 +370,7 @@ func TestOSS(t *testing.T) {
s, _ := newOSS(os.Getenv("ALICLOUD_ENDPOINT"),
os.Getenv("ALICLOUD_ACCESS_KEY_ID"),
os.Getenv("ALICLOUD_ACCESS_KEY_SECRET"), "")
//--access-key LTAI5tJeW4SrkX6HLK8mkYFe --secret-key RtiWJcBQHOAYEA7kGkmvZ99DCgzYLk
testStorage(t, s)
}

Expand Down Expand Up @@ -711,7 +729,7 @@ func TestIBMCOS(t *testing.T) {

func TestMain(m *testing.M) {
// schema: S3 AWS_ENDPOINT=xxxxx AWS_ACCESS_KEY_ID=xxxx AWS_SECRET_ACCESS_KEY=xxxx
envFile := "/tmp/aksk.txt"
envFile := "/Users/duanjiaxing/apps/aksk.txt"
if _, err := os.Stat(envFile); err == nil {
file, _ := os.ReadFile(envFile)
for _, line := range strings.Split(strings.TrimSpace(string(file)), "\n") {
Expand Down

0 comments on commit f6694dd

Please sign in to comment.