Skip to content

Commit e61577d

Browse files
committed
updating unit tests
1 parent 69b839b commit e61577d

File tree

1 file changed

+98
-2
lines changed

1 file changed

+98
-2
lines changed

receiver/oracledbreceiver/scraper_test.go

Lines changed: 98 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"path/filepath"
1313
"strings"
1414
"testing"
15+
"time"
1516

1617
lru "github.com/hashicorp/golang-lru/v2"
1718
"github.com/stretchr/testify/assert"
@@ -291,6 +292,7 @@ func TestScraper_ScrapeTopNLogs(t *testing.T) {
291292
}()
292293
require.NoError(t, err)
293294
expectedQueryPlanFile := filepath.Join("testdata", "expectedQueryTextAndPlanQuery.yaml")
295+
collectionTriggerTime := time.Now()
294296

295297
logs, err := scrpr.scrapeLogs(t.Context())
296298

@@ -304,6 +306,8 @@ func TestScraper_ScrapeTopNLogs(t *testing.T) {
304306
assert.NoError(t, errs)
305307
assert.Equal(t, "db.server.top_query", logs.ResourceLogs().At(0).ScopeLogs().At(0).LogRecords().At(0).EventName())
306308
assert.NoError(t, errs)
309+
310+
assert.True(t, scrpr.lastExecutionTimestamp.After(collectionTriggerTime), "lastExecutionTimestamp hasn't set after a successful collection")
307311
}
308312
})
309313
}
@@ -426,8 +430,100 @@ func TestGetInstanceId(t *testing.T) {
426430
assert.Equal(t, "unknown:1521", localInstanceID)
427431
}
428432

429-
func testCalculateLookbackSeconds(t *testing.T) {
430-
//TODO
433+
func TestScrapesTopNLogsOnlyWhenIntervalHasElapsed(t *testing.T) {
434+
var metricRowData []metricRow
435+
var logRowData []metricRow
436+
tests := []struct {
437+
name string
438+
dbclientFn func(db *sql.DB, s string, logger *zap.Logger) dbClient
439+
errWanted string
440+
}{
441+
{
442+
name: "valid collection",
443+
dbclientFn: func(_ *sql.DB, s string, _ *zap.Logger) dbClient {
444+
if strings.Contains(s, "V$SQL_PLAN") {
445+
metricRowFile := readFile("oracleQueryPlanData.txt")
446+
unmarshalErr := json.Unmarshal(metricRowFile, &logRowData)
447+
if unmarshalErr == nil {
448+
return &fakeDbClient{
449+
Responses: [][]metricRow{
450+
logRowData,
451+
},
452+
}
453+
}
454+
} else {
455+
metricRowFile := readFile("oracleQueryMetricsData.txt")
456+
unmarshalErr := json.Unmarshal(metricRowFile, &metricRowData)
457+
if unmarshalErr == nil {
458+
return &fakeDbClient{
459+
Responses: [][]metricRow{
460+
metricRowData,
461+
},
462+
}
463+
}
464+
}
465+
return nil
466+
},
467+
},
468+
}
469+
470+
for _, test := range tests {
471+
t.Run(test.name, func(t *testing.T) {
472+
logsCfg := metadata.DefaultLogsBuilderConfig()
473+
logsCfg.Events.DbServerTopQuery.Enabled = true
474+
metricsCfg := metadata.DefaultMetricsBuilderConfig()
475+
lruCache, _ := lru.New[string, map[string]int64](500)
476+
lruCache.Add("fxk8aq3nds8aw:0", cacheValue)
477+
478+
scrpr := oracleScraper{
479+
logger: zap.NewNop(),
480+
mb: metadata.NewMetricsBuilder(metricsCfg, receivertest.NewNopSettings(metadata.Type)),
481+
lb: metadata.NewLogsBuilder(logsCfg, receivertest.NewNopSettings(metadata.Type)),
482+
dbProviderFunc: func() (*sql.DB, error) {
483+
return nil, nil
484+
},
485+
clientProviderFunc: test.dbclientFn,
486+
metricsBuilderConfig: metadata.DefaultMetricsBuilderConfig(),
487+
logsBuilderConfig: metadata.DefaultLogsBuilderConfig(),
488+
metricCache: lruCache,
489+
topQueryCollectCfg: TopQueryCollection{MaxQuerySampleCount: 5000, TopQueryCount: 200},
490+
obfuscator: newObfuscator(),
491+
}
492+
493+
scrpr.logsBuilderConfig.Events.DbServerTopQuery.Enabled = true
494+
scrpr.topQueryCollectCfg.CollectionInterval = 1 * time.Minute
495+
496+
err := scrpr.start(t.Context(), componenttest.NewNopHost())
497+
defer func() {
498+
assert.NoError(t, scrpr.shutdown(t.Context()))
499+
}()
500+
require.NoError(t, err)
501+
502+
assert.True(t, scrpr.lastExecutionTimestamp.IsZero(), "No value should be set for lastExecutionTimestamp before a successful collection")
503+
logsCol1, _ := scrpr.scrapeLogs(t.Context())
504+
assert.Equal(t, 1, logsCol1.ResourceLogs().At(0).ScopeLogs().Len(), "Collection should run when lastExecutionTimestamp is not available")
505+
assert.False(t, scrpr.lastExecutionTimestamp.IsZero(), "A value should be set for lastExecutionTimestamp after a successful collection")
506+
507+
scrpr.lastExecutionTimestamp.Add(-10 * time.Second)
508+
logsCol2, err := scrpr.scrapeLogs(t.Context())
509+
assert.Equal(t, 0, logsCol2.ResourceLogs().Len(), "top_query should not be collected until %s elapsed.", scrpr.topQueryCollectCfg.CollectionInterval.String())
510+
require.NoError(t, err, "coll")
511+
})
512+
}
513+
}
514+
515+
func TestCalculateLookbackSeconds(t *testing.T) {
516+
collectionInterval := 20 * time.Second
517+
vsqlRefreshLagSec := 10 * time.Second
518+
expectedMinimumLookbackTime := int((collectionInterval + vsqlRefreshLagSec).Seconds())
519+
currentCollectionTime := time.Now()
520+
521+
scrpr := oracleScraper{
522+
lastExecutionTimestamp: currentCollectionTime.Add(-collectionInterval),
523+
}
524+
lookbackTime := scrpr.calculateLookbackSeconds()
525+
526+
assert.LessOrEqual(t, expectedMinimumLookbackTime, lookbackTime, "`lookbackTime` should be minimum %d", expectedMinimumLookbackTime)
431527
}
432528

433529
func readFile(fname string) []byte {

0 commit comments

Comments
 (0)