mirror of
				https://github.com/datarhei/core.git
				synced 2025-10-31 11:26:52 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			169 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			169 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package fs
 | |
| 
 | |
| import (
 | |
| 	"strings"
 | |
| 	"testing"
 | |
| 	"time"
 | |
| 
 | |
| 	"github.com/datarhei/core/v16/io/fs"
 | |
| 	"github.com/stretchr/testify/require"
 | |
| )
 | |
| 
 | |
| func TestMaxFiles(t *testing.T) {
 | |
| 	memfs, _ := fs.NewMemFilesystem(fs.MemConfig{})
 | |
| 
 | |
| 	cleanfs := New(Config{
 | |
| 		FS: memfs,
 | |
| 	})
 | |
| 
 | |
| 	cleanfs.Start()
 | |
| 
 | |
| 	cleanfs.SetCleanup("foobar", []Pattern{
 | |
| 		{
 | |
| 			Pattern:    "/*.ts",
 | |
| 			MaxFiles:   3,
 | |
| 			MaxFileAge: 0,
 | |
| 		},
 | |
| 	})
 | |
| 
 | |
| 	cleanfs.WriteFileReader("/chunk_0.ts", strings.NewReader("chunk_0"))
 | |
| 	cleanfs.WriteFileReader("/chunk_1.ts", strings.NewReader("chunk_1"))
 | |
| 	cleanfs.WriteFileReader("/chunk_2.ts", strings.NewReader("chunk_2"))
 | |
| 
 | |
| 	require.Eventually(t, func() bool {
 | |
| 		return cleanfs.Files() == 3
 | |
| 	}, 3*time.Second, time.Second)
 | |
| 
 | |
| 	cleanfs.WriteFileReader("/chunk_3.ts", strings.NewReader("chunk_3"))
 | |
| 
 | |
| 	require.Eventually(t, func() bool {
 | |
| 		if cleanfs.Files() != 3 {
 | |
| 			return false
 | |
| 		}
 | |
| 
 | |
| 		names := []string{}
 | |
| 
 | |
| 		for _, f := range cleanfs.List("/", "/*.ts") {
 | |
| 			names = append(names, f.Name())
 | |
| 		}
 | |
| 
 | |
| 		require.ElementsMatch(t, []string{"/chunk_1.ts", "/chunk_2.ts", "/chunk_3.ts"}, names)
 | |
| 
 | |
| 		return true
 | |
| 	}, 3*time.Second, time.Second)
 | |
| 
 | |
| 	cleanfs.Stop()
 | |
| }
 | |
| 
 | |
| func TestMaxAge(t *testing.T) {
 | |
| 	memfs, _ := fs.NewMemFilesystem(fs.MemConfig{})
 | |
| 
 | |
| 	cleanfs := New(Config{
 | |
| 		FS: memfs,
 | |
| 	})
 | |
| 
 | |
| 	cleanfs.Start()
 | |
| 
 | |
| 	cleanfs.SetCleanup("foobar", []Pattern{
 | |
| 		{
 | |
| 			Pattern:    "/*.ts",
 | |
| 			MaxFiles:   0,
 | |
| 			MaxFileAge: 3 * time.Second,
 | |
| 		},
 | |
| 	})
 | |
| 
 | |
| 	cleanfs.WriteFileReader("/chunk_0.ts", strings.NewReader("chunk_0"))
 | |
| 	cleanfs.WriteFileReader("/chunk_1.ts", strings.NewReader("chunk_1"))
 | |
| 	cleanfs.WriteFileReader("/chunk_2.ts", strings.NewReader("chunk_2"))
 | |
| 
 | |
| 	require.Eventually(t, func() bool {
 | |
| 		return cleanfs.Files() == 0
 | |
| 	}, 5*time.Second, time.Second)
 | |
| 
 | |
| 	cleanfs.WriteFileReader("/chunk_3.ts", strings.NewReader("chunk_3"))
 | |
| 
 | |
| 	require.Eventually(t, func() bool {
 | |
| 		if cleanfs.Files() != 1 {
 | |
| 			return false
 | |
| 		}
 | |
| 
 | |
| 		names := []string{}
 | |
| 
 | |
| 		for _, f := range cleanfs.List("/", "/*.ts") {
 | |
| 			names = append(names, f.Name())
 | |
| 		}
 | |
| 
 | |
| 		require.ElementsMatch(t, []string{"/chunk_3.ts"}, names)
 | |
| 
 | |
| 		return true
 | |
| 	}, 2*time.Second, time.Second)
 | |
| 
 | |
| 	cleanfs.Stop()
 | |
| }
 | |
| 
 | |
| func TestUnsetCleanup(t *testing.T) {
 | |
| 	memfs, _ := fs.NewMemFilesystem(fs.MemConfig{})
 | |
| 
 | |
| 	cleanfs := New(Config{
 | |
| 		FS: memfs,
 | |
| 	})
 | |
| 
 | |
| 	cleanfs.Start()
 | |
| 
 | |
| 	cleanfs.SetCleanup("foobar", []Pattern{
 | |
| 		{
 | |
| 			Pattern:    "/*.ts",
 | |
| 			MaxFiles:   3,
 | |
| 			MaxFileAge: 0,
 | |
| 		},
 | |
| 	})
 | |
| 
 | |
| 	cleanfs.WriteFileReader("/chunk_0.ts", strings.NewReader("chunk_0"))
 | |
| 	cleanfs.WriteFileReader("/chunk_1.ts", strings.NewReader("chunk_1"))
 | |
| 	cleanfs.WriteFileReader("/chunk_2.ts", strings.NewReader("chunk_2"))
 | |
| 
 | |
| 	require.Eventually(t, func() bool {
 | |
| 		return cleanfs.Files() == 3
 | |
| 	}, 3*time.Second, time.Second)
 | |
| 
 | |
| 	cleanfs.WriteFileReader("/chunk_3.ts", strings.NewReader("chunk_3"))
 | |
| 
 | |
| 	require.Eventually(t, func() bool {
 | |
| 		if cleanfs.Files() != 3 {
 | |
| 			return false
 | |
| 		}
 | |
| 
 | |
| 		names := []string{}
 | |
| 
 | |
| 		for _, f := range cleanfs.List("/", "/*.ts") {
 | |
| 			names = append(names, f.Name())
 | |
| 		}
 | |
| 
 | |
| 		require.ElementsMatch(t, []string{"/chunk_1.ts", "/chunk_2.ts", "/chunk_3.ts"}, names)
 | |
| 
 | |
| 		return true
 | |
| 	}, 3*time.Second, time.Second)
 | |
| 
 | |
| 	cleanfs.UnsetCleanup("foobar")
 | |
| 
 | |
| 	cleanfs.WriteFileReader("/chunk_4.ts", strings.NewReader("chunk_4"))
 | |
| 
 | |
| 	require.Eventually(t, func() bool {
 | |
| 		if cleanfs.Files() != 4 {
 | |
| 			return false
 | |
| 		}
 | |
| 
 | |
| 		names := []string{}
 | |
| 
 | |
| 		for _, f := range cleanfs.List("/", "/*.ts") {
 | |
| 			names = append(names, f.Name())
 | |
| 		}
 | |
| 
 | |
| 		require.ElementsMatch(t, []string{"/chunk_1.ts", "/chunk_2.ts", "/chunk_3.ts", "/chunk_4.ts"}, names)
 | |
| 
 | |
| 		return true
 | |
| 	}, 3*time.Second, time.Second)
 | |
| 
 | |
| 	cleanfs.Stop()
 | |
| }
 | 
