diff --git a/pkg/datanode/datanode_test.go b/pkg/datanode/datanode_test.go index 847d20b..267f421 100644 --- a/pkg/datanode/datanode_test.go +++ b/pkg/datanode/datanode_test.go @@ -1,7 +1,6 @@ package datanode import ( - "io/fs" "os" "reflect" "sort" @@ -26,42 +25,6 @@ func TestDataNode(t *testing.T) { t.Fatalf("Expected error opening nonexistent file, got nil") } - // Test Stat - info, err := dn.Stat("bar/baz.txt") - if err != nil { - t.Fatalf("Stat failed: %v", err) - } - if info.Name() != "baz.txt" { - t.Errorf("Expected name baz.txt, got %s", info.Name()) - } - if info.Size() != 3 { - t.Errorf("Expected size 3, got %d", info.Size()) - } - if info.IsDir() { - t.Errorf("Expected baz.txt to not be a directory") - } - - dirInfo, err := dn.Stat("bar") - if err != nil { - t.Fatalf("Stat directory failed: %v", err) - } - if !dirInfo.IsDir() { - t.Errorf("Expected 'bar' to be a directory") - } - - // Test Exists - exists, err := dn.Exists("foo.txt") - if err != nil || !exists { - t.Errorf("Expected foo.txt to exist, err: %v", err) - } - exists, err = dn.Exists("bar") - if err != nil || !exists { - t.Errorf("Expected 'bar' directory to exist, err: %v", err) - } - exists, err = dn.Exists("nonexistent") - if err != nil || exists { - t.Errorf("Expected 'nonexistent' to not exist, err: %v", err) - } // Test ReadDir entries, err := dn.ReadDir(".") @@ -90,17 +53,6 @@ func TestDataNode(t *testing.T) { t.Errorf("Expected %d entries in 'bar', got %d", len(expectedBarEntries), len(barEntries)) } - // Test Walk - var paths []string - dn.Walk(".", func(path string, d fs.DirEntry, err error) error { - paths = append(paths, path) - return nil - }) - expectedPaths := []string{".", "bar", "bar/baz.txt", "bar/qux.txt", "foo.txt"} - sort.Strings(paths) - if !reflect.DeepEqual(paths, expectedPaths) { - t.Errorf("Walk expected paths %v, got %v", expectedPaths, paths) - } // Test CopyFile tmpfile, err := os.CreateTemp("", "datanode-test-") diff --git a/pkg/datanode/fromtar_test.go b/pkg/datanode/fromtar_test.go new file mode 100644 index 0000000..dd77265 --- /dev/null +++ b/pkg/datanode/fromtar_test.go @@ -0,0 +1,38 @@ +package datanode + +import ( + "archive/tar" + "bytes" + "testing" +) + +func TestFromTar(t *testing.T) { + buf := new(bytes.Buffer) + tw := tar.NewWriter(buf) + testData := "hello world" + + hdr := &tar.Header{ + Name: "test.txt", + Mode: 0600, + Size: int64(len(testData)), + } + if err := tw.WriteHeader(hdr); err != nil { + t.Fatalf("failed to write header: %v", err) + } + if _, err := tw.Write([]byte(testData)); err != nil { + t.Fatalf("failed to write content: %v", err) + } + if err := tw.Close(); err != nil { + t.Fatalf("failed to close writer: %v", err) + } + + dn, err := FromTar(buf.Bytes()) + if err != nil { + t.Fatalf("FromTar failed: %v", err) + } + file, err := dn.Open("test.txt") + if err != nil { + t.Fatalf("Open failed: %v", err) + } + defer file.Close() +} diff --git a/pkg/datanode/fs_test.go b/pkg/datanode/fs_test.go new file mode 100644 index 0000000..be86c7d --- /dev/null +++ b/pkg/datanode/fs_test.go @@ -0,0 +1,69 @@ +package datanode + +import ( + "io/fs" + "reflect" + "sort" + "testing" +) + +func TestDataNodeFS(t *testing.T) { + dn := New() + dn.AddData("foo.txt", []byte("foo")) + dn.AddData("bar/baz.txt", []byte("baz")) + dn.AddData("bar/qux.txt", []byte("qux")) + + // Test Stat + info, err := dn.Stat("bar/baz.txt") + if err != nil { + t.Fatalf("Stat failed: %v", err) + } + if info.Name() != "baz.txt" { + t.Errorf("Expected name baz.txt, got %s", info.Name()) + } + if info.Size() != 3 { + t.Errorf("Expected size 3, got %d", info.Size()) + } + if info.IsDir() { + t.Errorf("Expected baz.txt to not be a directory") + } + + dirInfo, err := dn.Stat("bar") + if err != nil { + t.Fatalf("Stat directory failed: %v", err) + } + if !dirInfo.IsDir() { + t.Errorf("Expected 'bar' to be a directory") + } + + _, err = dn.Stat("nonexistent") + if err == nil { + t.Fatal("Expected error for nonexistent file, got nil") + } + + // Test Exists + exists, err := dn.Exists("foo.txt") + if err != nil || !exists { + t.Errorf("Expected foo.txt to exist, err: %v", err) + } + exists, err = dn.Exists("bar") + if err != nil || !exists { + t.Errorf("Expected 'bar' directory to exist, err: %v", err) + } + exists, err = dn.Exists("nonexistent") + if err != nil || exists { + t.Errorf("Expected 'nonexistent' to not exist, err: %v", err) + } + + // Test Walk + var paths []string + dn.Walk(".", func(path string, d fs.DirEntry, err error) error { + paths = append(paths, path) + return nil + }) + expectedPaths := []string{".", "bar", "bar/baz.txt", "bar/qux.txt", "foo.txt"} + sort.Strings(paths) + if !reflect.DeepEqual(paths, expectedPaths) { + t.Errorf("Walk expected paths %v, got %v", expectedPaths, paths) + } +}