Skip to content

Read aggregated counter table too for hourly stats #52

Read aggregated counter table too for hourly stats

Read aggregated counter table too for hourly stats #52

GitHub Actions / Test results succeeded Oct 14, 2024 in 0s

249 passed, 0 failed and 0 skipped

Tests passed successfully

✅ tests/Hangfire.PostgreSql.Tests/TestResults/TestResults.trx

249 tests were completed in 94s with 249 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
Hangfire.PostgreSql.Tests.CountersAggregatorFacts 1✅ 451ms
Hangfire.PostgreSql.Tests.ExpirationManagerFacts 10✅ 7s
Hangfire.PostgreSql.Tests.FirstClassQueueFeatureSupportTests 2✅ 289ms
Hangfire.PostgreSql.Tests.PersistentJobQueueProviderCollectionFacts 7✅ 10ms
Hangfire.PostgreSql.Tests.PostgreSqlConnectionFacts 91✅ 932ms
Hangfire.PostgreSql.Tests.PostgreSqlDistributedLockFacts 12✅ 20s
Hangfire.PostgreSql.Tests.PostgreSqlFetchedJobFacts 12✅ 30s
Hangfire.PostgreSql.Tests.PostgreSqlInstallerFacts 2✅ 226ms
Hangfire.PostgreSql.Tests.PostgreSqlJobQueueFacts 28✅ 26s
Hangfire.PostgreSql.Tests.PostgreSqlMonitoringApiFacts 2✅ 42ms
Hangfire.PostgreSql.Tests.PostgreSqlStorageFacts 14✅ 11ms
Hangfire.PostgreSql.Tests.PostgreSqlStorageOptionsFacts 11✅ 4ms
Hangfire.PostgreSql.Tests.PostgreSqlWriteOnlyTransactionFacts 57✅ 7s

✅ Hangfire.PostgreSql.Tests.CountersAggregatorFacts

✅ Execute_AggregatesCounters

✅ Hangfire.PostgreSql.Tests.ExpirationManagerFacts

✅ Ctor_ThrowsAnException_WhenStorageIsNull
✅ Execute_Aggregates_CounterTable
✅ Execute_DoesNotRemoveEntries_WithFreshExpirationTime
✅ Execute_DoesNotRemoveEntries_WithNoExpirationTimeSet
✅ Execute_Processes_CounterTable
✅ Execute_Processes_HashTable
✅ Execute_Processes_JobTable
✅ Execute_Processes_ListTable
✅ Execute_Processes_SetTable
✅ Execute_RemovesOutdatedRecords

✅ Hangfire.PostgreSql.Tests.FirstClassQueueFeatureSupportTests

✅ EnqueueJobWithSpecificQueue_ShouldEnqueueCorrectlyAndJobMustBeProcessedInThatQueue
✅ HasFlag_ShouldReturnTrue_ForJobQueueProperty

✅ Hangfire.PostgreSql.Tests.PersistentJobQueueProviderCollectionFacts

✅ Add_ThrowsAnException_WhenProviderIsNull
✅ Add_ThrowsAnException_WhenQueuesCollectionIsNull
✅ Ctor_ThrowsAnException_WhenDefaultProviderIsNull
✅ Enumeration_ContainsAddedProvider
✅ Enumeration_IncludesTheDefaultProvider
✅ GetProvider_CanBeResolved_ByAnyQueue
✅ GetProvider_ReturnsTheDefaultProvider_WhenProviderCanNotBeResolvedByQueue

✅ Hangfire.PostgreSql.Tests.PostgreSqlConnectionFacts

✅ AcquireLock_ReturnsNonNullInstance
✅ AnnounceServer_CreatesOrUpdatesARecord
✅ AnnounceServer_ThrowsAnException_WhenContextIsNull
✅ AnnounceServer_ThrowsAnException_WhenServerIdIsNull
✅ CreateExpiredJob_CreatesAJobInTheStorage_AndSetsItsParameters
✅ CreateExpiredJob_EnlistsInTransaction(completeTransactionScope: False)
✅ CreateExpiredJob_EnlistsInTransaction(completeTransactionScope: True)
✅ CreateExpiredJob_ThrowsAnException_WhenJobIsNull
✅ CreateExpiredJob_ThrowsAnException_WhenParametersCollectionIsNull
✅ CreateWriteTransaction_ReturnsNonNullInstance
✅ Ctor_ThrowsAnException_WhenOptionsIsNull
✅ Ctor_ThrowsAnException_WhenStorageIsNull
✅ FetchNextJob_DelegatesItsExecution_ToTheQueue
✅ FetchNextJob_Throws_IfMultipleProvidersResolved
✅ GetAllEntriesFromHash_ReturnsAllKeysAndTheirValues
✅ GetAllEntriesFromHash_ReturnsNull_IfHashDoesNotExist
✅ GetAllEntriesFromHash_ThrowsAnException_WhenKeyIsNull
✅ GetAllItemsFromList_ReturnsAllItems_FromAGivenList
✅ GetAllItemsFromList_ReturnsAnEmptyList_WhenListDoesNotExist
✅ GetAllItemsFromList_ThrowsAnException_WhenKeyIsNull
✅ GetAllItemsFromSet_ReturnsAllItems
✅ GetAllItemsFromSet_ReturnsEmptyCollection_WhenKeyDoesNotExist
✅ GetAllItemsFromSet_ThrowsAnException_WhenKeyIsNull
✅ GetCounter_ReturnsSumOfValues_InCounterTable
✅ GetCounter_ReturnsZero_WhenKeyDoesNotExist
✅ GetCounter_ThrowsAnException_WhenKeyIsNull
✅ GetFirstByLowestScoreFromSet_List_ReturnsAllLowestValuesMatchingInputs
✅ GetFirstByLowestScoreFromSet_List_ReturnsEmpty_WhenNoValuesExistForKey
✅ GetFirstByLowestScoreFromSet_List_ReturnsEmpty_WhenTheKeyDoesNotExist
✅ GetFirstByLowestScoreFromSet_List_ReturnsSubsetOfLowestValuesMatchingInputs
✅ GetFirstByLowestScoreFromSet_List_ThrowsAnException_WhenCountIsLessThanOne(count: -1)
✅ GetFirstByLowestScoreFromSet_List_ThrowsAnException_WhenCountIsLessThanOne(count: 0)
✅ GetFirstByLowestScoreFromSet_List_ThrowsAnException_WhenKeyIsNull
✅ GetFirstByLowestScoreFromSet_List_ThrowsAnException_WhenToScoreIsLowerThanFromScore
✅ GetFirstByLowestScoreFromSet_ReturnsNull_WhenTheKeyDoesNotExist
✅ GetFirstByLowestScoreFromSet_ReturnsTheValueWithTheLowestScore
✅ GetFirstByLowestScoreFromSet_ThrowsAnException_ToScoreIsLowerThanFromScore
✅ GetFirstByLowestScoreFromSet_ThrowsAnException_WhenKeyIsNull
✅ GetHashCount_ReturnsNumber_OfHashFields
✅ GetHashCount_ReturnsZero_WhenKeyDoesNotExist
✅ GetHashCount_ThrowsAnException_WhenKeyIsNull
✅ GetHashTtl_ReturnsExpirationTimeForHash
✅ GetHashTtl_ReturnsNegativeValue_WhenHashDoesNotExist
✅ GetHashTtl_ThrowsAnException_WhenKeyIsNull
✅ GetJobData_ReturnsNull_WhenThereIsNoSuchJob
✅ GetJobData_ReturnsResult_WhenJobExists
✅ GetJobData_ThrowsAnException_WhenJobIdIsNull
✅ GetListCount_ReturnsTheNumberOfListElements
✅ GetListCount_ReturnsZero_WhenListDoesNotExist
✅ GetListCount_ThrowsAnException_WhenKeyIsNull
✅ GetListTtl_ReturnsExpirationTimeForList
✅ GetListTtl_ReturnsNegativeValue_WhenListDoesNotExist
✅ GetListTtl_ThrowsAnException_WhenKeyIsNull
✅ GetParameter_ReturnsNull_WhenParameterDoesNotExists
✅ GetParameter_ReturnsParameterValue_WhenJobExists
✅ GetParameter_ThrowsAnException_WhenJobIdIsNull
✅ GetParameter_ThrowsAnException_WhenNameIsNull
✅ GetRangeFromList_ReturnsAllEntries_WithinGivenBounds
✅ GetRangeFromList_ReturnsAnEmptyList_WhenListDoesNotExist
✅ GetRangeFromList_ThrowsAnException_WhenKeyIsNull
✅ GetRangeFromSet_ReturnsPagedElements
✅ GetRangeFromSet_ThrowsAnException_WhenKeyIsNull
✅ GetSetCount_ReturnsNumberOfElements_InASet
✅ GetSetCount_ReturnsZero_WhenSetDoesNotExist
✅ GetSetCount_ThrowsAnException_WhenKeyIsNull
✅ GetSetTtl_ReturnsExpirationTime_OfAGivenSet
✅ GetSetTtl_ReturnsNegativeValue_WhenSetDoesNotExist
✅ GetSetTtl_ThrowsAnException_WhenKeyIsNull
✅ GetStateData_ReturnsCorrectData
✅ GetStateData_ReturnsNull_IfThereIsNoSuchState
✅ GetStateData_ThrowsAnException_WhenJobIdIsNull
✅ GetValueFromHash_ReturnsNull_WhenHashDoesNotExist
✅ GetValueFromHash_ReturnsValue_OfAGivenField
✅ GetValueFromHash_ThrowsAnException_WhenKeyIsNull
✅ GetValueFromHash_ThrowsAnException_WhenNameIsNull
✅ Heartbeat_ThrowsAnException_WhenServerIdIsNull
✅ Heartbeat_ThrowsBackgroundServerGoneException_WhenServerDisappeared
✅ Heartbeat_UpdatesLastHeartbeat_OfTheServerWithGivenId
✅ RemoveServer_RemovesAServerRecord
✅ RemoveServer_ThrowsAnException_WhenServerIdIsNull
✅ RemoveTimedOutServers_DoItsWorkPerfectly
✅ RemoveTimedOutServers_ThrowsAnException_WhenTimeOutIsNegative
✅ SetParameter_CanAcceptNulls_AsValues
✅ SetParameter_ThrowsAnException_WhenJobIdIsNull
✅ SetParameter_ThrowsAnException_WhenNameIsNull
✅ SetParameter_UpdatesValue_WhenParameterWithTheGivenName_AlreadyExists
✅ SetParameters_CreatesNewParameter_WhenParameterWithTheGivenNameDoesNotExists
✅ SetRangeInHash_DoesNotThrowSerializationException
✅ SetRangeInHash_MergesAllRecords
✅ SetRangeInHash_ThrowsAnException_WhenKeyIsNull
✅ SetRangeInHash_ThrowsAnException_WhenKeyValuePairsArgumentIsNull

✅ Hangfire.PostgreSql.Tests.PostgreSqlDistributedLockFacts

✅ Acquire_AcquiresExclusiveApplicationLock_WithoutUseNativeDatabaseTransactions_OnSession
✅ Acquire_AcquiresExclusiveApplicationLock_WithUseNativeDatabaseTransactions_OnSession
✅ Acquire_AcquiresExclusiveApplicationLock_WithUseNativeDatabaseTransactions_OnSession_WhenDeadlockOccurs
✅ Acquire_ExpiredLockExists_LocksAnyway(useNativeDatabaseTransactions: False)
✅ Acquire_ExpiredLockExists_LocksAnyway(useNativeDatabaseTransactions: True)
✅ Acquire_ThrowsAnException_IfLockCanNotBeGranted_WithoutUseNativeDatabaseTransactions
✅ Acquire_ThrowsAnException_IfLockCanNotBeGranted_WithUseNativeDatabaseTransactions
✅ Acquire_ThrowsAnException_WhenConnectionIsNull
✅ Acquire_ThrowsAnException_WhenOptionsIsNull
✅ Acquire_ThrowsAnException_WhenResourceIsNullOrEmpty
✅ Dispose_ReleasesExclusiveApplicationLock_WithoutUseNativeDatabaseTransactions
✅ Dispose_ReleasesExclusiveApplicationLock_WithUseNativeDatabaseTransactions

✅ Hangfire.PostgreSql.Tests.PostgreSqlFetchedJobFacts

✅ Ctor_CorrectlySets_AllInstanceProperties
✅ Ctor_ThrowsAnException_WhenFetchedAtIsNull
✅ Ctor_ThrowsAnException_WhenJobIdIsNull
✅ Ctor_ThrowsAnException_WhenQueueIsNull
✅ Ctor_ThrowsAnException_WhenStorageIsNull
✅ Dispose_SetsFetchedAtValueToNull_IfThereWereNoCallsToComplete
✅ RemoveFromQueue_AfterTimer_RemovesJobFromTheQueue
✅ RemoveFromQueue_DoesNotDelete_UnrelatedJobs
✅ RemoveFromQueue_ReallyDeletesTheJobFromTheQueue
✅ Requeue_SetsFetchedAtValueToNull
✅ RequeueQueue_AfterTimer_SetsFetchedAtValueToNull
✅ Timer_UpdatesFetchedAtColumn

✅ Hangfire.PostgreSql.Tests.PostgreSqlInstallerFacts

✅ InstallingSchemaUpdatesVersionAndShouldNotThrowAnException
✅ InstallingSchemaWithCapitalsUpdatesVersionAndShouldNotThrowAnException

✅ Hangfire.PostgreSql.Tests.PostgreSqlJobQueueFacts

✅ Ctor_ThrowsAnException_WhenStorageIsNull
✅ Dequeue_ShouldFetchAJob_FromQueueWithHigherPriority
✅ Dequeue_ShouldFetchAJob_FromTheSpecifiedQueue_WithoutUseNativeDatabaseTransactions
✅ Dequeue_ShouldFetchAJob_FromTheSpecifiedQueue_WithUseNativeDatabaseTransactions
✅ Dequeue_ShouldFetchATimedOutJobs_FromTheSpecifiedQueue_WithoutUseNativeDatabaseTransactions
✅ Dequeue_ShouldFetchATimedOutJobs_FromTheSpecifiedQueue_WithoutUseNativeDatabaseTransactionsAndSlidingInvisbility
✅ Dequeue_ShouldFetchATimedOutJobs_FromTheSpecifiedQueue_WithUseNativeDatabaseTransactions
✅ Dequeue_ShouldFetchATimedOutJobs_FromTheSpecifiedQueue_WithUseNativeDatabaseTransactionsAndSlidingInvisbility
✅ Dequeue_ShouldFetchJobs_FromMultipleQueues_WithoutUseNativeDatabaseTransactions
✅ Dequeue_ShouldFetchJobs_FromMultipleQueues_WithUseNativeDatabaseTransactions
✅ Dequeue_ShouldFetchJobs_OnlyFromSpecifiedQueues_WithoutUseNativeDatabaseTransactions
✅ Dequeue_ShouldFetchJobs_OnlyFromSpecifiedQueues_WithUseNativeDatabaseTransactions
✅ Dequeue_ShouldLeaveJobInTheQueue_ButSetItsFetchedAtValue_WithoutUseNativeDatabaseTransactions
✅ Dequeue_ShouldLeaveJobInTheQueue_ButSetItsFetchedAtValue_WithUseNativeDatabaseTransactions
✅ Dequeue_ShouldSetFetchedAt_OnlyForTheFetchedJob_WithoutUseNativeDatabaseTransactions
✅ Dequeue_ShouldSetFetchedAt_OnlyForTheFetchedJob_WithUseNativeDatabaseTransactions
✅ Dequeue_ShouldThrowAnException_WhenQueuesCollectionIsEmpty_WithoutUseNativeDatabaseTransactions
✅ Dequeue_ShouldThrowAnException_WhenQueuesCollectionIsEmpty_WithUseNativeDatabaseTransactions
✅ Dequeue_ShouldThrowAnException_WhenQueuesCollectionIsNull
✅ Dequeue_ShouldWaitIndefinitely_WhenThereAreNoJobs_WithoutUseNativeDatabaseTransactions
✅ Dequeue_ShouldWaitIndefinitely_WhenThereAreNoJobs_WithUseNativeDatabaseTransactions
✅ Dequeue_ThrowsOperationCanceled_WhenCancellationTokenIsSetAtTheBeginning_WithoutUseNativeDatabaseTransactions
✅ Dequeue_ThrowsOperationCanceled_WhenCancellationTokenIsSetAtTheBeginning_WithUseNativeDatabaseTransactions
✅ Enqueue_AddsAJobToTheQueue_WithoutUseNativeDatabaseTransactions
✅ Enqueue_AddsAJobToTheQueue_WithUseNativeDatabaseTransactions
✅ Queues_Can_Dequeue_On_Notification
✅ Queues_Can_Dequeue_On_Signal
✅ Queues_Should_Support_Long_Queue_Names

✅ Hangfire.PostgreSql.Tests.PostgreSqlMonitoringApiFacts

✅ GetJobs_MixedCasing_ReturnsJob
✅ HourlySucceededJobs_ReturnsAggregatedStats

✅ Hangfire.PostgreSql.Tests.PostgreSqlStorageFacts

✅ CanCreateAndOpenConnection_WithExistingConnectionFactory
✅ CanUseTransaction_WithDifferentTransactionIsolationLevel
✅ CreateAndOpenConnection_ThrowsAnException_WithExistingConnectionFactoryAndInvalidOptions
✅ Ctor_CanCreateSqlServerStorage_WithExistingConnection
✅ Ctor_CanCreateSqlServerStorage_WithExistingConnectionFactory
✅ Ctor_InitializesDefaultJobQueueProvider_AndPassesCorrectOptions
✅ Ctor_ThrowsAnException_WhenConnectionFactoryIsNull
✅ GetComponents_ReturnsAllNeededComponents
✅ GetMonitoringApi_ReturnsNonNullInstance
✅ HasFeature_ReturnsCorrectValues(featureName: "", expected: False)
✅ HasFeature_ReturnsCorrectValues(featureName: "Connection.BatchedGetFirstByLowestScoreFromSet", expected: True)
✅ HasFeature_ReturnsCorrectValues(featureName: "Job.Queue", expected: True)
✅ HasFeature_ReturnsCorrectValues(featureName: "Unsupported", expected: False)
✅ HasFeature_ThrowsAnException_WhenFeatureIsNull

✅ Hangfire.PostgreSql.Tests.PostgreSqlStorageOptionsFacts

✅ Ctor_SetsTheDefaultOptions
✅ Set_DistributedLockTimeout_SetsTheValue
✅ Set_DistributedLockTimeout_ShouldThrowAnException_WhenGivenIntervalIsEqualToZero
✅ Set_DistributedLockTimeout_ShouldThrowAnException_WhenGivenIntervalIsNegative
✅ Set_InvisibilityTimeout_SetsTheValue
✅ Set_InvisibilityTimeout_ShouldThrowAnException_WhenGivenIntervalIsEqualToZero
✅ Set_InvisibilityTimeout_ShouldThrowAnException_WhenGivenIntervalIsNegative
✅ Set_QueuePollInterval_SetsTheValue
✅ Set_QueuePollInterval_SetsTheValue_WhenGivenIntervalIsTooLow_ButIgnored
✅ Set_QueuePollInterval_ShouldThrowAnException_WhenGivenIntervalIsEqualToZero_EvenIfIgnored
✅ Set_QueuePollInterval_ShouldThrowAnException_WhenGivenIntervalIsTooLow

✅ Hangfire.PostgreSql.Tests.PostgreSqlWriteOnlyTransactionFacts

✅ AddJobState_JustAddsANewRecordInATable
✅ AddRangeToSet_AddsAllItems_ToAGivenSet
✅ AddRangeToSet_ThrowsAnException_WhenItemsValueIsNull
✅ AddRangeToSet_ThrowsAnException_WhenKeyIsNull
✅ AddToQueue_AddsAJobToTheQueue_UsingStorageConnection_WithTransactionScopeEnlistment
✅ AddToQueue_CallsEnqueue_OnTargetPersistentQueue
✅ AddToSet_AddsARecord_IfThereIsNo_SuchKeyAndValue
✅ AddToSet_AddsARecord_WhenKeyIsExists_ButValuesAreDifferent
✅ AddToSet_DoesNotAddARecord_WhenBothKeyAndValueAreExist
✅ AddToSet_DoesNotFailWithConcurrencyError_WhenRunningMultipleThreads
✅ AddToSet_WithScore_AddsARecordWithScore_WhenBothKeyAndValueAreNotExist
✅ AddToSet_WithScore_UpdatesAScore_WhenBothKeyAndValueAreExist
✅ Ctor_ThrowsAnException_IfDedicatedConnectionFuncIsNull
✅ Ctor_ThrowsAnException_IfStorageIsNull
✅ DecrementCounter_AddsRecordToCounterTable_WithNegativeValue
✅ DecrementCounter_WithExistingKey_AddsAnotherRecord
✅ DecrementCounter_WithExpiry_AddsARecord_WithExpirationTimeSet
✅ ExpireHash_SetsExpirationTimeOnAHash_WithGivenKey
✅ ExpireHash_ThrowsAnException_WhenKeyIsNull
✅ ExpireJob_SetsJobExpirationData
✅ ExpireList_SetsExpirationTime_OnAList_WithGivenKey
✅ ExpireList_ThrowsAnException_WhenKeyIsNull
✅ ExpireSet_SetsExpirationTime_OnASet_WithGivenKey
✅ ExpireSet_ThrowsAnException_WhenKeyIsNull
✅ IncrementCounter_AddsRecordToCounterTable_WithPositiveValue
✅ IncrementCounter_WithExistingKey_AddsAnotherRecord
✅ IncrementCounter_WithExpiry_AddsARecord_WithExpirationTimeSet
✅ InsertToList_AddsAnotherRecord_WhenBothKeyAndValueAreExist
✅ InsertToList_AddsARecord_WithGivenValues
✅ PersistHash_ClearsExpirationTime_OnAGivenHash
✅ PersistHash_ThrowsAnException_WhenKeyIsNull
✅ PersistJob_ClearsTheJobExpirationData
✅ PersistList_ClearsExpirationTime_OnAGivenHash
✅ PersistList_ThrowsAnException_WhenKeyIsNull
✅ PersistSet_ClearsExpirationTime_OnAGivenHash
✅ PersistSet_ThrowsAnException_WhenKeyIsNull
✅ RemoveFromList_DoesNotRemoveRecords_WithSameKey_ButDifferentValue
✅ RemoveFromList_DoesNotRemoveRecords_WithSameValue_ButDifferentKey
✅ RemoveFromList_RemovesAllRecords_WithGivenKeyAndValue
✅ RemoveFromSet_DoesNotRemoveRecord_WithSameKey_AndDifferentValue
✅ RemoveFromSet_DoesNotRemoveRecord_WithSameValue_AndDifferentKey
✅ RemoveFromSet_RemovesARecord_WithGivenKeyAndValue
✅ RemoveHash_RemovesAllHashRecords
✅ RemoveHash_ThrowsAnException_WhenKeyIsNull
✅ RemoveSet_RemovesASet_WithAGivenKey
✅ RemoveSet_ThrowsAnException_WhenKeyIsNull
✅ SetJobState_AppendsAStateAndSetItToTheJob
✅ SetJobState_EnlistsInAmbientTransaction(completeTransactionScope: False)
✅ SetJobState_EnlistsInAmbientTransaction(completeTransactionScope: True)
✅ SetRangeInHash_MergesAllRecords
✅ SetRangeInHash_ThrowsAnException_WhenKeyIsNull
✅ SetRangeInHash_ThrowsAnException_WhenKeyValuePairsArgumentIsNull
✅ TrimList_RemovesAllRecords_IfStartFromGreaterThanEndingAt
✅ TrimList_RemovesAllRecords_WhenStartingFromValue_GreaterThanMaxElementIndex
✅ TrimList_RemovesRecords_OnlyOfAGivenKey
✅ TrimList_RemovesRecordsToEnd_IfKeepAndingAt_GreaterThanMaxElementIndex
✅ TrimList_TrimsAList_ToASpecifiedRange