// Verify that all messages are read from the event log. func TestRead(t *testing.T) { configureLogp() log, err := initLog(providerName, sourceName, eventCreateMsgFile) if err != nil { t.Fatal(err) } defer func() { err := uninstallLog(providerName, sourceName, log) if err != nil { t.Fatal(err) } }() // Publish test messages: for k, m := range messages { err = log.Report(m.eventType, k, []string{m.message}) if err != nil { t.Fatal(err) } } // Read messages: eventlog, err := newEventLogging(map[string]interface{}{"name": providerName}) if err != nil { t.Fatal(err) } err = eventlog.Open(0) if err != nil { t.Fatal(err) } defer func() { err := eventlog.Close() if err != nil { t.Fatal(err) } }() records, err := eventlog.Read() if err != nil { t.Fatal(err) } // Validate messages: assert.Len(t, records, len(messages)) for _, record := range records { t.Log(record) m, exists := messages[record.EventIdentifier.ID] if !exists { t.Errorf("Unknown EventId %d Read() from event log. %v", record.EventIdentifier.ID, record) continue } assert.Equal(t, eventlogging.EventType(m.eventType).String(), record.Level) assert.Equal(t, m.message, strings.TrimRight(record.Message, "\r\n")) } // Validate getNumberOfEventLogRecords returns the correct number of messages. numMessages, err := eventlogging.GetNumberOfEventLogRecords(eventlogging.Handle(log.Handle)) assert.NoError(t, err) assert.Equal(t, len(messages), int(numMessages)) }
func (l *eventLogging) Open(recordNumber uint64) error { detailf("%s Open(recordNumber=%d) calling OpenEventLog(uncServerPath=%s, "+ "providerName=%s)", l.logPrefix, recordNumber, l.uncServerPath, l.name) handle, err := sys.OpenEventLog(l.uncServerPath, l.name) if err != nil { return err } numRecords, err := sys.GetNumberOfEventLogRecords(handle) if err != nil { return err } var oldestRecord, newestRecord uint32 if numRecords > 0 { l.recordNumber = uint32(recordNumber) l.seek = true l.ignoreFirst = true oldestRecord, err = sys.GetOldestEventLogRecord(handle) if err != nil { return err } newestRecord = oldestRecord + numRecords - 1 if l.recordNumber < oldestRecord || l.recordNumber > newestRecord { l.recordNumber = oldestRecord l.ignoreFirst = false } } else { l.recordNumber = 0 l.seek = false l.ignoreFirst = false } logp.Info("%s contains %d records. Record number range [%d, %d]. Starting "+ "at %d (ignoringFirst=%t)", l.logPrefix, numRecords, oldestRecord, newestRecord, l.recordNumber, l.ignoreFirst) l.handle = handle return nil }