github.com/xzl8028/xenia-server@v0.0.0-20190809101854-18450a97da63/store/storetest/audit_store.go (about)

     1  // Copyright (c) 2015-present Xenia, Inc. All Rights Reserved.
     2  // See License.txt for license information.
     3  
     4  package storetest
     5  
     6  import (
     7  	"testing"
     8  	"time"
     9  
    10  	"github.com/xzl8028/xenia-server/model"
    11  	"github.com/xzl8028/xenia-server/store"
    12  	"github.com/stretchr/testify/assert"
    13  	"github.com/stretchr/testify/require"
    14  )
    15  
    16  func TestAuditStore(t *testing.T, ss store.Store) {
    17  	t.Run("", func(t *testing.T) { testAuditStore(t, ss) })
    18  	t.Run("PermanentDeleteBatch", func(t *testing.T) { testAuditStorePermanentDeleteBatch(t, ss) })
    19  }
    20  
    21  func testAuditStore(t *testing.T, ss store.Store) {
    22  	audit := &model.Audit{UserId: model.NewId(), IpAddress: "ipaddress", Action: "Action"}
    23  	require.Nil(t, ss.Audit().Save(audit))
    24  	time.Sleep(100 * time.Millisecond)
    25  	require.Nil(t, ss.Audit().Save(audit))
    26  	time.Sleep(100 * time.Millisecond)
    27  	require.Nil(t, ss.Audit().Save(audit))
    28  	time.Sleep(100 * time.Millisecond)
    29  	audit.ExtraInfo = "extra"
    30  	time.Sleep(100 * time.Millisecond)
    31  	require.Nil(t, ss.Audit().Save(audit))
    32  
    33  	time.Sleep(100 * time.Millisecond)
    34  
    35  	audits, err := ss.Audit().Get(audit.UserId, 0, 100)
    36  	require.Nil(t, err)
    37  
    38  	assert.Len(t, audits, 4)
    39  
    40  	assert.Equal(t, "extra", audits[0].ExtraInfo)
    41  
    42  	audits, err = ss.Audit().Get("missing", 0, 100)
    43  
    44  	assert.Len(t, audits, 0)
    45  
    46  	audits, err = ss.Audit().Get("", 0, 100)
    47  
    48  	if len(audits) < 4 {
    49  		t.Fatal("Failed to save and retrieve 4 audit logs")
    50  	}
    51  
    52  	require.Nil(t, ss.Audit().PermanentDeleteByUser(audit.UserId))
    53  }
    54  
    55  func testAuditStorePermanentDeleteBatch(t *testing.T, ss store.Store) {
    56  	a1 := &model.Audit{UserId: model.NewId(), IpAddress: "ipaddress", Action: "Action"}
    57  	require.Nil(t, ss.Audit().Save(a1))
    58  	time.Sleep(10 * time.Millisecond)
    59  	a2 := &model.Audit{UserId: a1.UserId, IpAddress: "ipaddress", Action: "Action"}
    60  	require.Nil(t, ss.Audit().Save(a2))
    61  	time.Sleep(10 * time.Millisecond)
    62  	cutoff := model.GetMillis()
    63  	time.Sleep(10 * time.Millisecond)
    64  	a3 := &model.Audit{UserId: a1.UserId, IpAddress: "ipaddress", Action: "Action"}
    65  	require.Nil(t, ss.Audit().Save(a3))
    66  
    67  	audits, err := ss.Audit().Get(a1.UserId, 0, 100)
    68  	assert.Len(t, audits, 3)
    69  
    70  	_, err = ss.Audit().PermanentDeleteBatch(cutoff, 1000000)
    71  	require.Nil(t, err)
    72  
    73  	audits, err = ss.Audit().Get(a1.UserId, 0, 100)
    74  	assert.Len(t, audits, 1)
    75  
    76  	require.Nil(t, ss.Audit().PermanentDeleteByUser(a1.UserId))
    77  }