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  }