test CopyOnWriteFs with OsFs
diff --git a/composite_test.go b/composite_test.go
index e8d7be6..20ebc05 100644
--- a/composite_test.go
+++ b/composite_test.go
@@ -5,8 +5,11 @@
 	"os"
 	"testing"
 	"time"
+	"fmt"
 )
 
+var tempDirs []string
+
 func TestUnionCreateExisting(t *testing.T) {
 	base := &MemMapFs{}
 	roBase := &ReadOnlyFs{source: base}
@@ -82,6 +85,110 @@
 	}
 }
 
+func TestExistingDirectoryCollisionReaddir(t *testing.T) {
+	base := &MemMapFs{}
+	roBase := &ReadOnlyFs{source: base}
+	overlay := &MemMapFs{}
+
+	ufs := &CopyOnWriteFs{base: roBase, layer: overlay}
+
+	base.MkdirAll("/home/test", 0777)
+	fh, _ := base.Create("/home/test/file.txt")
+	fh.WriteString("This is a test")
+	fh.Close()
+
+	overlay.MkdirAll("home/test", 0777)
+	fh, _ = overlay.Create("/home/test/file2.txt")
+	fh.WriteString("This is a test")
+	fh.Close()
+
+	fh, _ = ufs.Create("/home/test/file3.txt")
+	fh.WriteString("This is a test")
+	fh.Close()
+
+	fh, _ = ufs.Open("/home/test")
+	files, err := fh.Readdirnames(-1)
+	if err != nil {
+		t.Errorf("Readdirnames failed")
+	}
+	if len(files) != 3 {
+		t.Errorf("Got wrong number of files in union: %v", files)
+	}
+
+	fh, _ = overlay.Open("/home/test")
+	files, err = fh.Readdirnames(-1)
+	if err != nil {
+		t.Errorf("Readdirnames failed")
+	}
+	if len(files) != 2 {
+		t.Errorf("Got wrong number of files in overlay: %v", files)
+	}
+}
+
+func NewTempOsBaseFs(t *testing.T) Fs {
+	name, err := TempDir(NewOsFs(), "", "")
+	if err != nil {
+		t.Error("error creating tempDir", err)
+	}
+
+	fmt.Println("created tempdir", name)
+	tempDirs = append(tempDirs, name)
+
+	return NewBasePathFs(NewOsFs(), name)
+}
+
+func CleanupTempDirs() {
+	osfs := NewOsFs()
+	for _, x := range tempDirs {
+		err := osfs.RemoveAll(x)
+		if err != nil {
+			fmt.Println("error removing tempDir", x, err)
+		}
+	}
+	tempDirs = []string{}
+}
+
+func TestCopyOnWriteFsWithOsFs(t *testing.T) {
+	defer CleanupTempDirs()
+	base := NewTempOsBaseFs(t)
+	roBase := &ReadOnlyFs{source: base}
+	overlay := NewTempOsBaseFs(t)
+
+	ufs := &CopyOnWriteFs{base: roBase, layer: overlay}
+
+	base.MkdirAll("/home/test", 0777)
+	fh, _ := base.Create("/home/test/file.txt")
+	fh.WriteString("This is a test")
+	fh.Close()
+
+	overlay.MkdirAll("home/test", 0777)
+	fh, _ = overlay.Create("/home/test/file2.txt")
+	fh.WriteString("This is a test")
+	fh.Close()
+
+	fh, _ = ufs.Create("/home/test/file3.txt")
+	fh.WriteString("This is a test")
+	fh.Close()
+
+	fh, _ = ufs.Open("/home/test")
+	files, err := fh.Readdirnames(-1)
+	if err != nil {
+		t.Errorf("Readdirnames failed")
+	}
+	if len(files) != 3 {
+		t.Errorf("Got wrong number of files in union: %v", files)
+	}
+
+	fh, _ = overlay.Open("/home/test")
+	files, err = fh.Readdirnames(-1)
+	if err != nil {
+		t.Errorf("Readdirnames failed")
+	}
+	if len(files) != 2 {
+		t.Errorf("Got wrong number of files in overlay: %v", files)
+	}
+}
+
 func TestUnionCacheWrite(t *testing.T) {
 	base := &MemMapFs{}
 	layer := &MemMapFs{}