github.com/Uptycs/basequery-go@v0.8.0/plugin/logger/logger_test.go (about)

     1  package logger
     2  
     3  import (
     4  	"context"
     5  	"errors"
     6  	"testing"
     7  
     8  	"github.com/Uptycs/basequery-go/gen/osquery"
     9  	"github.com/stretchr/testify/assert"
    10  )
    11  
    12  type mockLoggerPlugin struct {
    13  	NameFunc      func() string
    14  	LogStringFunc func(context.Context, LogType, string) error
    15  }
    16  
    17  func (m *mockLoggerPlugin) Name() string {
    18  	return m.NameFunc()
    19  }
    20  
    21  func (m *mockLoggerPlugin) LogString(ctx context.Context, typ LogType, log string) error {
    22  	return m.LogStringFunc(ctx, typ, log)
    23  }
    24  
    25  func TestLoggerPlugin(t *testing.T) {
    26  	var calledType LogType
    27  	var calledLog string
    28  	plugin := NewPlugin("mock", func(ctx context.Context, typ LogType, log string) error {
    29  		calledType = typ
    30  		calledLog = log
    31  		return nil
    32  	})
    33  
    34  	StatusOK := osquery.ExtensionStatus{Code: 0, Message: "OK"}
    35  	// Basic methods
    36  	assert.Equal(t, "logger", plugin.RegistryName())
    37  	assert.Equal(t, "mock", plugin.Name())
    38  	assert.Equal(t, StatusOK, plugin.Ping())
    39  	assert.Equal(t, osquery.ExtensionPluginResponse{}, plugin.Routes())
    40  
    41  	// Log string
    42  	resp := plugin.Call(context.Background(), osquery.ExtensionPluginRequest{"string": "logged string"})
    43  	assert.Equal(t, &StatusOK, resp.Status)
    44  	assert.Equal(t, LogTypeString, calledType)
    45  	assert.Equal(t, "logged string", calledLog)
    46  
    47  	// Log snapshot
    48  	resp = plugin.Call(context.Background(), osquery.ExtensionPluginRequest{"snapshot": "logged snapshot"})
    49  	assert.Equal(t, &StatusOK, resp.Status)
    50  	assert.Equal(t, LogTypeSnapshot, calledType)
    51  	assert.Equal(t, "logged snapshot", calledLog)
    52  
    53  	// Log health
    54  	resp = plugin.Call(context.Background(), osquery.ExtensionPluginRequest{"health": "logged health"})
    55  	assert.Equal(t, &StatusOK, resp.Status)
    56  	assert.Equal(t, LogTypeHealth, calledType)
    57  	assert.Equal(t, "logged health", calledLog)
    58  
    59  	// Log init
    60  	resp = plugin.Call(context.Background(), osquery.ExtensionPluginRequest{"init": "logged init"})
    61  	assert.Equal(t, &StatusOK, resp.Status)
    62  	assert.Equal(t, LogTypeInit, calledType)
    63  	assert.Equal(t, "logged init", calledLog)
    64  
    65  	// Log status
    66  	resp = plugin.Call(context.Background(), osquery.ExtensionPluginRequest{"status": "true", "log": `{"":{"s":"0","f":"events.cpp","i":"828","m":"Event publisher failed setup: kernel: Cannot access \/dev\/osquery"},"":{"s":"0","f":"events.cpp","i":"828","m":"Event publisher failed setup: scnetwork: Publisher not used"},"":{"s":"0","f":"scheduler.cpp","i":"74","m":"Executing scheduled query macos_kextstat: SELECT * FROM time"}}`})
    67  	assert.Equal(t, &StatusOK, resp.Status)
    68  	assert.Equal(t, LogTypeStatus, calledType)
    69  	assert.Equal(t, `{"s":"0","f":"scheduler.cpp","i":"74","m":"Executing scheduled query macos_kextstat: SELECT * FROM time"}`, calledLog)
    70  }
    71  
    72  func TestLogPluginErrors(t *testing.T) {
    73  	var called bool
    74  	plugin := NewPlugin("mock", func(ctx context.Context, typ LogType, log string) error {
    75  		called = true
    76  		return errors.New("foobar")
    77  	})
    78  
    79  	// Call with bad actions
    80  	assert.Equal(t, int32(1), plugin.Call(context.Background(), osquery.ExtensionPluginRequest{}).Status.Code)
    81  	assert.False(t, called)
    82  	assert.Equal(t, int32(1), plugin.Call(context.Background(), osquery.ExtensionPluginRequest{"action": "bad"}).Status.Code)
    83  	assert.False(t, called)
    84  
    85  	// Call with empty status
    86  	assert.Equal(t, int32(1), plugin.Call(context.Background(), osquery.ExtensionPluginRequest{"status": "true", "log": ""}).Status.Code)
    87  	assert.False(t, called)
    88  
    89  	// Call with good action but logging fails
    90  	resp := plugin.Call(context.Background(), osquery.ExtensionPluginRequest{"string": "logged string"})
    91  	assert.True(t, called)
    92  	assert.Equal(t, int32(1), resp.Status.Code)
    93  	assert.Equal(t, "error logging: foobar", resp.Status.Message)
    94  }