github.com/observiq/carbon@v0.9.11-0.20200820160507-1b872e368a5e/operator/builtin/input/windows/bookmark_test.go (about) 1 // +build windows 2 3 package windows 4 5 import ( 6 "testing" 7 8 "github.com/stretchr/testify/require" 9 ) 10 11 func TestBookmarkOpenPreexisting(t *testing.T) { 12 bookmark := Bookmark{handle: 5} 13 err := bookmark.Open("") 14 require.Error(t, err) 15 require.Contains(t, err.Error(), "bookmark handle is already open") 16 } 17 18 func TestBookmarkOpenInvalidUTF8(t *testing.T) { 19 bookmark := NewBookmark() 20 invalidUTF8 := "\u0000" 21 err := bookmark.Open(invalidUTF8) 22 require.Error(t, err) 23 require.Contains(t, err.Error(), "failed to convert bookmark xml to utf16") 24 } 25 26 func TestBookmarkOpenSyscallFailure(t *testing.T) { 27 bookmark := NewBookmark() 28 xml := "<bookmark><\\bookmark>" 29 createBookmarkProc = SimpleMockProc(0, 0, ErrorNotSupported) 30 err := bookmark.Open(xml) 31 require.Error(t, err) 32 require.Contains(t, err.Error(), "failed to create bookmark handle from xml") 33 } 34 35 func TestBookmarkOpenSuccess(t *testing.T) { 36 bookmark := NewBookmark() 37 xml := "<bookmark><\\bookmark>" 38 createBookmarkProc = SimpleMockProc(5, 0, ErrorSuccess) 39 err := bookmark.Open(xml) 40 require.NoError(t, err) 41 require.Equal(t, uintptr(5), bookmark.handle) 42 } 43 44 func TestBookmarkUpdateFailureOnCreateSyscall(t *testing.T) { 45 event := NewEvent(1) 46 bookmark := NewBookmark() 47 createBookmarkProc = SimpleMockProc(0, 0, ErrorNotSupported) 48 err := bookmark.Update(event) 49 require.Error(t, err) 50 require.Contains(t, err.Error(), "syscall to `EvtCreateBookmark` failed") 51 } 52 53 func TestBookmarkUpdateFailureOnUpdateSyscall(t *testing.T) { 54 event := NewEvent(1) 55 bookmark := NewBookmark() 56 createBookmarkProc = SimpleMockProc(1, 0, ErrorSuccess) 57 updateBookmarkProc = SimpleMockProc(0, 0, ErrorNotSupported) 58 err := bookmark.Update(event) 59 require.Error(t, err) 60 require.Contains(t, err.Error(), "syscall to `EvtUpdateBookmark` failed") 61 } 62 63 func TestBookmarkUpdateSuccess(t *testing.T) { 64 event := NewEvent(1) 65 bookmark := NewBookmark() 66 createBookmarkProc = SimpleMockProc(5, 0, ErrorSuccess) 67 updateBookmarkProc = SimpleMockProc(1, 0, ErrorSuccess) 68 err := bookmark.Update(event) 69 require.NoError(t, err) 70 require.Equal(t, uintptr(5), bookmark.handle) 71 } 72 73 func TestBookmarkCloseWhenAlreadyClosed(t *testing.T) { 74 bookmark := NewBookmark() 75 err := bookmark.Close() 76 require.NoError(t, err) 77 } 78 79 func TestBookmarkCloseSyscallFailure(t *testing.T) { 80 bookmark := Bookmark{handle: 5} 81 closeProc = SimpleMockProc(0, 0, ErrorNotSupported) 82 err := bookmark.Close() 83 require.Error(t, err) 84 require.Contains(t, err.Error(), "failed to close bookmark handle") 85 } 86 87 func TestBookmarkCloseSuccess(t *testing.T) { 88 bookmark := Bookmark{handle: 5} 89 closeProc = SimpleMockProc(1, 0, ErrorSuccess) 90 err := bookmark.Close() 91 require.NoError(t, err) 92 require.Equal(t, uintptr(0), bookmark.handle) 93 } 94 95 func TestBookmarkRenderWhenClosed(t *testing.T) { 96 bookmark := NewBookmark() 97 buffer := NewBuffer() 98 _, err := bookmark.Render(buffer) 99 require.Error(t, err) 100 require.Contains(t, err.Error(), "bookmark handle is not open") 101 } 102 103 func TestBookmarkRenderInvalidSyscall(t *testing.T) { 104 bookmark := Bookmark{handle: 5} 105 buffer := NewBuffer() 106 renderProc = SimpleMockProc(0, 0, ErrorNotSupported) 107 _, err := bookmark.Render(buffer) 108 require.Error(t, err) 109 require.Contains(t, err.Error(), "syscall to 'EvtRender' failed") 110 }