From 7c85fafb54d04d3712bbea1ec39720e73b65edfc Mon Sep 17 00:00:00 2001 From: jkoberg Date: Wed, 9 Mar 2022 10:11:27 +0100 Subject: [PATCH] final touches Signed-off-by: jkoberg --- audit/pkg/command/server.go | 13 ++++++--- audit/pkg/service/service.go | 4 +-- audit/pkg/service/service_test.go | 46 +++++++++++++++++-------------- audit/pkg/types/events.go | 12 ++++++++ 4 files changed, 48 insertions(+), 27 deletions(-) create mode 100644 audit/pkg/types/events.go diff --git a/audit/pkg/command/server.go b/audit/pkg/command/server.go index 66609780a3..e74f09ff4b 100644 --- a/audit/pkg/command/server.go +++ b/audit/pkg/command/server.go @@ -1,6 +1,7 @@ package command import ( + "context" "fmt" "github.com/asim/go-micro/plugins/events/nats/v4" @@ -10,6 +11,7 @@ import ( "github.com/owncloud/ocis/audit/pkg/config/parser" "github.com/owncloud/ocis/audit/pkg/logging" svc "github.com/owncloud/ocis/audit/pkg/service" + "github.com/owncloud/ocis/audit/pkg/types" "github.com/urfave/cli/v2" ) @@ -25,21 +27,24 @@ func Server(cfg *config.Config) *cli.Command { Action: func(c *cli.Context) error { logger := logging.Configure(cfg.Service.Name, cfg.Log) - evs := []events.Unmarshaller{ - events.ShareCreated{}, + ctx := cfg.Context + if ctx == nil { + ctx = context.Background() } + ctx, cancel := context.WithCancel(ctx) + defer cancel() evtsCfg := cfg.Events client, err := server.NewNatsStream(nats.Address(evtsCfg.Endpoint), nats.ClusterID(evtsCfg.Cluster)) if err != nil { return err } - evts, err := events.Consume(client, evtsCfg.ConsumerGroup, evs...) + evts, err := events.Consume(client, evtsCfg.ConsumerGroup, types.RegisteredEvents()...) if err != nil { return err } - svc.AuditLoggerFromConfig(cfg.Auditlog, evts, logger) + svc.AuditLoggerFromConfig(ctx, cfg.Auditlog, evts, logger) return nil }, } diff --git a/audit/pkg/service/service.go b/audit/pkg/service/service.go index 5042b716bf..4f1f4b1aab 100644 --- a/audit/pkg/service/service.go +++ b/audit/pkg/service/service.go @@ -19,7 +19,7 @@ type Log func([]byte) type Marshaller func(interface{}) ([]byte, error) // AuditLoggerFromConfig will start a new AuditLogger generated from the config -func AuditLoggerFromConfig(cfg config.Auditlog, ch <-chan interface{}, log log.Logger) { +func AuditLoggerFromConfig(ctx context.Context, cfg config.Auditlog, ch <-chan interface{}, log log.Logger) { var logs []Log if cfg.LogToConsole { @@ -30,7 +30,7 @@ func AuditLoggerFromConfig(cfg config.Auditlog, ch <-chan interface{}, log log.L logs = append(logs, WriteToFile(cfg.FilePath, log)) } - StartAuditLogger(context.TODO(), ch, log, Marshal(cfg.Format, log), logs...) + StartAuditLogger(ctx, ch, log, Marshal(cfg.Format, log), logs...) } diff --git a/audit/pkg/service/service_test.go b/audit/pkg/service/service_test.go index a4cd2e00e6..0724acc397 100644 --- a/audit/pkg/service/service_test.go +++ b/audit/pkg/service/service_test.go @@ -4,7 +4,6 @@ import ( "context" "encoding/json" "testing" - "time" "github.com/cs3org/reva/v2/pkg/events" "github.com/owncloud/ocis/audit/pkg/types" @@ -20,7 +19,7 @@ import ( var testCases = []struct { Alias string SystemEvent interface{} - CheckAuditEvent func(t *testing.T) Log + CheckAuditEvent func(*testing.T, []byte) }{ { Alias: "ShareCreated", @@ -44,18 +43,16 @@ var testCases = []struct { Nanos: 0, }, }, - CheckAuditEvent: func(t *testing.T) Log { - return func(b []byte) { - ev := types.AuditEventShareCreated{} - err := json.Unmarshal(b, &ev) - require.NoError(t, err) + CheckAuditEvent: func(t *testing.T, b []byte) { + ev := types.AuditEventShareCreated{} + err := json.Unmarshal(b, &ev) + require.NoError(t, err) - require.Equal(t, ev.User, "sharing-userid") - require.Equal(t, ev.ShareWith, "beshared-userid") - require.Equal(t, ev.FileID, "itemid-1") - require.Equal(t, ev.Time, "1970-01-01T01:00:00+01:00") + require.Equal(t, ev.User, "sharing-userid") + require.Equal(t, ev.ShareWith, "beshared-userid") + require.Equal(t, ev.FileID, "itemid-1") + require.Equal(t, ev.Time, "1970-01-01T01:00:00+01:00") - } }, }, } @@ -63,14 +60,21 @@ var testCases = []struct { func TestAuditLogging(t *testing.T) { log := log.NewLogger() - for _, tc := range testCases { - ch := make(chan interface{}) - ctx, cancel := context.WithCancel(context.TODO()) - go StartAuditLogger(ctx, ch, log, Marshal("json", log), tc.CheckAuditEvent(t)) - ch <- tc.SystemEvent - cancel() - } + inch := make(chan interface{}) + defer close(inch) - // wait for events to be checked - time.Sleep(time.Second) + outch := make(chan []byte) + defer close(outch) + + ctx, cancel := context.WithCancel(context.TODO()) + defer cancel() + + go StartAuditLogger(ctx, inch, log, Marshal("json", log), func(b []byte) { + outch <- b + }) + + for _, tc := range testCases { + inch <- tc.SystemEvent + tc.CheckAuditEvent(t, <-outch) + } } diff --git a/audit/pkg/types/events.go b/audit/pkg/types/events.go new file mode 100644 index 0000000000..7a9825ef0f --- /dev/null +++ b/audit/pkg/types/events.go @@ -0,0 +1,12 @@ +package types + +import ( + "github.com/cs3org/reva/v2/pkg/events" +) + +// RegisteredEvents returns the events the service is registered for +func RegisteredEvents() []events.Unmarshaller { + return []events.Unmarshaller{ + events.ShareCreated{}, + } +}