package command import ( "testing" "github.com/seaweedfs/seaweedfs/weed/filer" "github.com/seaweedfs/seaweedfs/weed/pb/filer_pb" ) func TestMetadataEventDirectoryMembershipUsesDirectoryBoundaries(t *testing.T) { resp := &filer_pb.SubscribeMetadataResponse{ Directory: filer.DirectoryEtcRemote, EventNotification: &filer_pb.EventNotification{ OldEntry: &filer_pb.Entry{Name: "remote.conf"}, NewEntry: &filer_pb.Entry{Name: "remote.conf"}, NewParentPath: "/etc/remote-sibling", }, } sourceInDir, targetInDir := metadataEventDirectoryMembership(resp, filer.DirectoryEtcRemote) if !sourceInDir { t.Fatal("expected source directory to match") } if targetInDir { t.Fatal("did not expect sibling target directory to match") } } func TestMetadataEventUpdatesAndRemovesDirectory(t *testing.T) { tests := []struct { name string resp *filer_pb.SubscribeMetadataResponse wantUpdate bool wantRemoval bool }{ { name: "nil response", resp: nil, wantUpdate: false, wantRemoval: false, }, { name: "create event", resp: &filer_pb.SubscribeMetadataResponse{ Directory: filer.DirectoryEtcRemote, EventNotification: &filer_pb.EventNotification{ NewEntry: &filer_pb.Entry{Name: "new.conf"}, NewParentPath: filer.DirectoryEtcRemote, }, }, wantUpdate: true, wantRemoval: false, }, { name: "rename out", resp: &filer_pb.SubscribeMetadataResponse{ Directory: filer.DirectoryEtcRemote, EventNotification: &filer_pb.EventNotification{ OldEntry: &filer_pb.Entry{Name: "remote.conf"}, NewEntry: &filer_pb.Entry{Name: "remote.conf"}, NewParentPath: "/tmp", }, }, wantUpdate: false, wantRemoval: true, }, { name: "rename into", resp: &filer_pb.SubscribeMetadataResponse{ Directory: "/tmp", EventNotification: &filer_pb.EventNotification{ OldEntry: &filer_pb.Entry{Name: "remote.conf"}, NewEntry: &filer_pb.Entry{Name: "remote.conf"}, NewParentPath: filer.DirectoryEtcRemote, }, }, wantUpdate: true, wantRemoval: false, }, { name: "rename within", resp: &filer_pb.SubscribeMetadataResponse{ Directory: filer.DirectoryEtcRemote, EventNotification: &filer_pb.EventNotification{ OldEntry: &filer_pb.Entry{Name: "remote.conf"}, NewEntry: &filer_pb.Entry{Name: "renamed.conf"}, NewParentPath: filer.DirectoryEtcRemote, }, }, wantUpdate: true, wantRemoval: false, }, { name: "delete", resp: &filer_pb.SubscribeMetadataResponse{ Directory: filer.DirectoryEtcRemote, EventNotification: &filer_pb.EventNotification{ OldEntry: &filer_pb.Entry{Name: "remote.conf"}, }, }, wantUpdate: false, wantRemoval: true, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { if got := metadataEventUpdatesDirectory(tt.resp, filer.DirectoryEtcRemote); got != tt.wantUpdate { t.Fatalf("metadataEventUpdatesDirectory() = %v, want %v", got, tt.wantUpdate) } if got := metadataEventRemovesFromDirectory(tt.resp, filer.DirectoryEtcRemote); got != tt.wantRemoval { t.Fatalf("metadataEventRemovesFromDirectory() = %v, want %v", got, tt.wantRemoval) } }) } }