gitlab.com/postgres-ai/database-lab/v3@v3.0.3/pkg/util/pglog/activity_test.go (about)

     1  package pglog
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  
     7  	"github.com/AlekSi/pointer"
     8  	"github.com/stretchr/testify/assert"
     9  	"github.com/stretchr/testify/require"
    10  )
    11  
    12  func TestGetPostgresLastActivity(t *testing.T) {
    13  	testCases := []struct {
    14  		logTime      string
    15  		logMessage   string
    16  		timeActivity *time.Time
    17  	}{
    18  		{
    19  			logTime:      "2020-01-10 11:49:14.615 UTC",
    20  			logMessage:   "duration: 9.893 ms  statement: SELECT 1;",
    21  			timeActivity: pointer.ToTime(time.Date(2020, 1, 10, 11, 49, 14, 615000000, time.UTC)),
    22  		},
    23  		{
    24  			logTime:      "2020-01-11 13:10:58.503 UTC",
    25  			logMessage:   "duration: 0.077 ms  statement:",
    26  			timeActivity: pointer.ToTime(time.Date(2020, 1, 11, 13, 10, 58, 503000000, time.UTC)),
    27  		},
    28  		{
    29  			logTime:      "2020-01-11 12:10:56.867 UTC",
    30  			logMessage:   "database system is ready to accept connections",
    31  			timeActivity: nil,
    32  		},
    33  		{
    34  			logTime:      "",
    35  			logMessage:   "duration: 9.893 ms  statement: SELECT 1;",
    36  			timeActivity: nil,
    37  		},
    38  		{
    39  			logTime:      "2021-03-24 15:33:56.135 UTC",
    40  			logMessage:   "duration: 0.544 ms  execute lrupsc_28_0: EXPLAIN (FORMAT TEXT) select 1",
    41  			timeActivity: pointer.ToTime(time.Date(2021, 3, 24, 15, 33, 56, 135000000, time.UTC)),
    42  		},
    43  	}
    44  
    45  	for _, tc := range testCases {
    46  		lastActivity, err := ParsePostgresLastActivity(tc.logTime, tc.logMessage)
    47  		require.NoError(t, err)
    48  		assert.Equal(t, tc.timeActivity, lastActivity)
    49  	}
    50  }
    51  
    52  func TestGetPostgresLastActivityWhenFailedParseTime(t *testing.T) {
    53  	testCases := []struct {
    54  		logTime     string
    55  		logMessage  string
    56  		errorString string
    57  	}{
    58  		{
    59  			logTime:     "2020-01-10 11:49:14",
    60  			logMessage:  "duration: 9.893 ms  statement: SELECT 1;",
    61  			errorString: `failed to parse the last activity time: parsing time "2020-01-10 11:49:14" as "2006-01-02 15:04:05.000 UTC": cannot parse "" as ".000"`,
    62  		},
    63  	}
    64  
    65  	for _, tc := range testCases {
    66  		lastActivity, err := ParsePostgresLastActivity(tc.logTime, tc.logMessage)
    67  		require.Nil(t, lastActivity)
    68  		assert.EqualError(t, err, tc.errorString)
    69  	}
    70  }