github.com/observiq/carbon@v0.9.11-0.20200820160507-1b872e368a5e/commands/offsets_test.go (about)

     1  package commands
     2  
     3  import (
     4  	"bytes"
     5  	"io/ioutil"
     6  	"os"
     7  	"path/filepath"
     8  	"testing"
     9  
    10  	agent "github.com/observiq/carbon/agent"
    11  	"github.com/observiq/carbon/operator/helper"
    12  	"github.com/stretchr/testify/require"
    13  	"go.etcd.io/bbolt"
    14  )
    15  
    16  func TestOffsets(t *testing.T) {
    17  	tempDir, err := ioutil.TempDir("", "")
    18  	require.NoError(t, err)
    19  	defer os.RemoveAll(tempDir)
    20  
    21  	databasePath := filepath.Join(tempDir, "logagent.db")
    22  	configPath := filepath.Join(tempDir, "config.yaml")
    23  	ioutil.WriteFile(configPath, []byte{}, 0666)
    24  
    25  	// capture stdout
    26  	buf := bytes.NewBuffer([]byte{})
    27  	stdout = buf
    28  
    29  	// add an offset to the database
    30  	db, err := agent.OpenDatabase(databasePath)
    31  	require.NoError(t, err)
    32  	db.Update(func(tx *bbolt.Tx) error {
    33  		bucket, err := tx.CreateBucketIfNotExists(helper.OffsetsBucket)
    34  		require.NoError(t, err)
    35  
    36  		_, err = bucket.CreateBucket([]byte("$.testoperatorid1"))
    37  		require.NoError(t, err)
    38  		_, err = bucket.CreateBucket([]byte("$.testoperatorid2"))
    39  		require.NoError(t, err)
    40  		return nil
    41  	})
    42  	db.Close()
    43  
    44  	// check that offsets list actually lists the operator
    45  	offsetsList := NewRootCmd()
    46  	offsetsList.SetArgs([]string{
    47  		"offsets", "list",
    48  		"--database", databasePath,
    49  		"--config", configPath,
    50  	})
    51  
    52  	err = offsetsList.Execute()
    53  	require.NoError(t, err)
    54  	require.Equal(t, "$.testoperatorid1\n$.testoperatorid2\n", buf.String())
    55  
    56  	// clear the offsets
    57  	offsetsClear := NewRootCmd()
    58  	offsetsClear.SetArgs([]string{
    59  		"offsets", "clear",
    60  		"--database", databasePath,
    61  		"--config", configPath,
    62  		"$.testoperatorid2",
    63  	})
    64  
    65  	err = offsetsClear.Execute()
    66  	require.NoError(t, err)
    67  
    68  	// Check that offsets list only shows uncleared operator id
    69  	buf.Reset()
    70  	err = offsetsList.Execute()
    71  	require.NoError(t, err)
    72  	require.Equal(t, "$.testoperatorid1\n", buf.String())
    73  
    74  }