...

Source file src/github.com/cybertec-postgresql/pgwatch/v3/internal/sinks/json_test.go

Documentation: github.com/cybertec-postgresql/pgwatch/v3/internal/sinks

     1  package sinks
     2  
     3  import (
     4  	"context"
     5  	"encoding/json"
     6  	"os"
     7  	"testing"
     8  
     9  	"github.com/cybertec-postgresql/pgwatch/v3/internal/metrics"
    10  	"github.com/stretchr/testify/assert"
    11  )
    12  
    13  func TestJSONWriter_Write(t *testing.T) {
    14  	a := assert.New(t)
    15  	// Define test data
    16  	msg := metrics.MeasurementEnvelope{
    17  		MetricName: "test_metric",
    18  		Data: metrics.Measurements{
    19  			{"number": 1, "string": "test_data"},
    20  		},
    21  		DBName:     "test_db",
    22  		CustomTags: map[string]string{"foo": "boo"},
    23  	}
    24  
    25  	tempFile := t.TempDir() + "/test.json"
    26  	ctx, cancel := context.WithCancel(context.Background())
    27  	jw, err := NewJSONWriter(ctx, tempFile)
    28  	a.NoError(err)
    29  
    30  	err = jw.Write([]metrics.MeasurementEnvelope{msg})
    31  	a.NoError(err, "write successful")
    32  	err = jw.Write([]metrics.MeasurementEnvelope{})
    33  	a.NoError(err, "empty write successful")
    34  
    35  	cancel()
    36  	err = jw.Write([]metrics.MeasurementEnvelope{msg})
    37  	a.Error(err, "context canceled")
    38  
    39  	// Read the contents of the file
    40  	var data map[string]any
    41  	file, err := os.ReadFile(tempFile)
    42  	a.NoError(err)
    43  	err = json.Unmarshal(file, &data)
    44  	a.NoError(err)
    45  	a.Equal(msg.MetricName, data["metric"])
    46  	a.Equal(len(msg.Data), len(data["data"].([]any)))
    47  	a.Equal(msg.DBName, data["dbname"])
    48  	a.Equal(len(msg.CustomTags), len(data["custom_tags"].(map[string]any)))
    49  }
    50  
    51  func TestJSONWriter_SyncMetric(t *testing.T) {
    52  	// Create a temporary file for testing
    53  	tempFile := t.TempDir() + "/test.json"
    54  
    55  	ctx, cancel := context.WithCancel(context.Background())
    56  	jw, err := NewJSONWriter(ctx, tempFile)
    57  	assert.NoError(t, err)
    58  
    59  	// Call the function being tested
    60  	err = jw.SyncMetric("", "", "")
    61  	assert.NoError(t, err)
    62  
    63  	cancel()
    64  	err = jw.SyncMetric("", "", "")
    65  	assert.Error(t, err, "context canceled")
    66  
    67  }
    68