Skip to content

Commit 7a4d85f

Browse files
ScottArbeitScott Arbeit
andauthored
Replace Dapr-based Grace.Server.Tests with Aspire-hosted integration tests (#37)
* Full rewrite of Grace.Server.Tests to use Aspire instead of Dapr. Bug fix for a recursive Repository delete where we also delete the branches. * Quick fix from Codex code review for LogDirectory. --------- Co-authored-by: Scott Arbeit <scottarbeit@github.com>
1 parent 272e286 commit 7a4d85f

40 files changed

+1452
-926
lines changed

src/Grace.Actors/Branch.Actor.fs

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ open Orleans.Runtime
2424
open System
2525
open System.Collections.Generic
2626
open System.Diagnostics
27+
open System.Globalization
2728
open System.Linq
2829
open System.Runtime.Serialization
2930
open System.Text
@@ -544,10 +545,27 @@ module Branch =
544545
)
545546

546547
// Now proceed with the deletion regardless of reassignment
547-
let repositoryActorProxy =
548-
Repository.CreateActorProxy branchDto.OrganizationId branchDto.RepositoryId metadata.CorrelationId
549-
550-
let! repositoryDto = repositoryActorProxy.Get(metadata.CorrelationId)
548+
let tryGetLogicalDeleteDaysFromMetadata () =
549+
match metadata.Properties.TryGetValue("RepositoryLogicalDeleteDays") with
550+
| true, value ->
551+
let mutable parsed = 0.0f
552+
if Single.TryParse(value, NumberStyles.Float, CultureInfo.InvariantCulture, &parsed) then
553+
Some parsed
554+
else
555+
None
556+
| _ -> None
557+
558+
let! logicalDeleteDays =
559+
match tryGetLogicalDeleteDaysFromMetadata () with
560+
| Some days -> Task.FromResult days
561+
| None ->
562+
task {
563+
let repositoryActorProxy =
564+
Repository.CreateActorProxy branchDto.OrganizationId branchDto.RepositoryId metadata.CorrelationId
565+
566+
let! repositoryDto = repositoryActorProxy.Get(metadata.CorrelationId)
567+
return repositoryDto.LogicalDeleteDays
568+
}
551569

552570
// Delete the references for this branch.
553571
let! references = getReferences branchDto.RepositoryId branchDto.BranchId Int32.MaxValue metadata.CorrelationId
@@ -567,6 +585,8 @@ module Branch =
567585

568586
let metadata = EventMetadata.New metadata.CorrelationId GraceSystemUser
569587
metadata.Properties[nameof (RepositoryId)] <- $"{branchDto.RepositoryId}"
588+
metadata.Properties["RepositoryLogicalDeleteDays"] <-
589+
logicalDeleteDays.ToString("F", CultureInfo.InvariantCulture)
570590

571591
match!
572592
referenceActorProxy.Handle
@@ -601,7 +621,7 @@ module Branch =
601621
do!
602622
(this :> IGraceReminderWithGuidKey).ScheduleReminderAsync
603623
ReminderTypes.PhysicalDeletion
604-
(Duration.FromDays(float repositoryDto.LogicalDeleteDays))
624+
(Duration.FromDays(float logicalDeleteDays))
605625
(ReminderState.BranchPhysicalDeletion physicalDeletionReminderState)
606626
metadata.CorrelationId
607627

src/Grace.Actors/Owner.Actor.fs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,16 +58,44 @@ module Owner =
5858
try
5959
state.State.Add(ownerEvent)
6060

61+
log.LogInformation(
62+
"{CurrentInstant}: Owner.Actor writing state. CorrelationId: {CorrelationId}; OwnerId: {OwnerId}.",
63+
getCurrentInstantExtended (),
64+
ownerEvent.Metadata.CorrelationId,
65+
ownerDto.OwnerId
66+
)
67+
6168
do! state.WriteStateAsync()
6269

70+
log.LogInformation(
71+
"{CurrentInstant}: Owner.Actor state write completed. CorrelationId: {CorrelationId}; OwnerId: {OwnerId}.",
72+
getCurrentInstantExtended (),
73+
ownerEvent.Metadata.CorrelationId,
74+
ownerDto.OwnerId
75+
)
76+
6377
// Update the Dto based on the current event.
6478
ownerDto <- ownerDto |> OwnerDto.UpdateDto ownerEvent
6579

6680
// Publish the event to the rest of the world.
6781
let graceEvent = Events.GraceEvent.OwnerEvent ownerEvent
6882

83+
log.LogInformation(
84+
"{CurrentInstant}: Owner.Actor publishing GraceEvent. CorrelationId: {CorrelationId}; OwnerId: {OwnerId}.",
85+
getCurrentInstantExtended (),
86+
ownerEvent.Metadata.CorrelationId,
87+
ownerDto.OwnerId
88+
)
89+
6990
do! publishGraceEvent graceEvent ownerEvent.Metadata
7091

92+
log.LogInformation(
93+
"{CurrentInstant}: Owner.Actor published GraceEvent. CorrelationId: {CorrelationId}; OwnerId: {OwnerId}.",
94+
getCurrentInstantExtended (),
95+
ownerEvent.Metadata.CorrelationId,
96+
ownerDto.OwnerId
97+
)
98+
7199
let returnValue = GraceReturnValue.Create "Owner command succeeded." ownerEvent.Metadata.CorrelationId
72100

73101
returnValue

src/Grace.Actors/Reference.Actor.fs

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ open Orleans
2222
open Orleans.Runtime
2323
open System
2424
open System.Collections.Generic
25+
open System.Globalization
2526
open System.Threading.Tasks
2627

2728
module Reference =
@@ -284,10 +285,27 @@ module Reference =
284285
| AddLink link -> return LinkAdded link
285286
| RemoveLink link -> return LinkRemoved link
286287
| DeleteLogical(force, deleteReason) ->
287-
let repositoryActorProxy =
288-
Repository.CreateActorProxy referenceDto.OrganizationId referenceDto.RepositoryId this.correlationId
289-
290-
let! repositoryDto = repositoryActorProxy.Get this.correlationId
288+
let tryGetLogicalDeleteDaysFromMetadata () =
289+
match metadata.Properties.TryGetValue("RepositoryLogicalDeleteDays") with
290+
| true, value ->
291+
let mutable parsed = 0.0f
292+
if Single.TryParse(value, NumberStyles.Float, CultureInfo.InvariantCulture, &parsed) then
293+
Some parsed
294+
else
295+
None
296+
| _ -> None
297+
298+
let! logicalDeleteDays =
299+
match tryGetLogicalDeleteDaysFromMetadata () with
300+
| Some days -> Task.FromResult days
301+
| None ->
302+
task {
303+
let repositoryActorProxy =
304+
Repository.CreateActorProxy referenceDto.OrganizationId referenceDto.RepositoryId this.correlationId
305+
306+
let! repositoryDto = repositoryActorProxy.Get this.correlationId
307+
return repositoryDto.LogicalDeleteDays
308+
}
291309

292310
let reminderState: PhysicalDeletionReminderState =
293311
{ RepositoryId = referenceDto.RepositoryId
@@ -300,7 +318,7 @@ module Reference =
300318
do!
301319
(this :> IGraceReminderWithGuidKey).ScheduleReminderAsync
302320
ReminderTypes.PhysicalDeletion
303-
(Duration.FromDays(float repositoryDto.LogicalDeleteDays))
321+
(Duration.FromDays(float logicalDeleteDays))
304322
(ReminderState.ReferencePhysicalDeletion reminderState)
305323
metadata.CorrelationId
306324

src/Grace.Actors/Repository.Actor.fs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ open Orleans.Runtime
2929
open System
3030
open System.Collections.Concurrent
3131
open System.Collections.Generic
32+
open System.Globalization
3233
open System.Linq
3334
open System.Text
3435
open System.Text.Json
@@ -231,6 +232,11 @@ module Repository =
231232
if branch.DeletedAt |> Option.isNone then
232233
let branchActor = Branch.CreateActorProxy branch.BranchId branch.RepositoryId this.correlationId
233234

235+
let childMetadata = EventMetadata.New metadata.CorrelationId GraceSystemUser
236+
childMetadata.Properties[nameof RepositoryId] <- $"{repositoryDto.RepositoryId}"
237+
childMetadata.Properties["RepositoryLogicalDeleteDays"] <-
238+
repositoryDto.LogicalDeleteDays.ToString("F", CultureInfo.InvariantCulture)
239+
234240
let! result =
235241
branchActor.Handle
236242
(BranchCommand.DeleteLogical(
@@ -239,7 +245,7 @@ module Repository =
239245
false,
240246
None
241247
))
242-
metadata
248+
childMetadata
243249

244250
results.Enqueue(result)
245251
}

src/Grace.Actors/StorageAccount.fs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,7 @@ module StorageAccount =
3838
let containerClients = new ConcurrentDictionary<string, BlobContainerClient>()
3939

4040
let retrieveSecret secretName =
41-
let secrets =
42-
daprClient
43-
.GetSecretAsync(Constants.GraceSecretStoreName, secretName)
44-
.GetAwaiter()
45-
.GetResult()
41+
let secrets = daprClient.GetSecretAsync(Constants.GraceSecretStoreName, secretName).GetAwaiter().GetResult()
4642

4743
secrets.Item secretName
4844

0 commit comments

Comments
 (0)