@@ -703,7 +703,7 @@ public function test_it_ingests_payloads_under_the_threshold_after_10_seconds():
703703 $ingestDetailsBrowser->assertPending([]);
704704 }
705705
706- public function test_it_ingests_payloads_before_10_seconds_if_the_buffer_exceeds_the_threshold (): void
706+ public function test_it_ingests_payloads_before_10_seconds_if_the_buffer_reaches_the_threshold (): void
707707 {
708708 $loop = new LoopFake(runForSeconds: 11);
709709 $server = new TcpServerFake;
@@ -724,7 +724,7 @@ public function test_it_ingests_payloads_before_10_seconds_if_the_buffer_exceeds
724724 ingestBrowser: $ingestBrowser,
725725 loop: $loop,
726726 server: $server,
727- maxBufferLength: 63 ,
727+ maxBufferLength: 62 ,
728728 );
729729
730730 $this->assertNull($e, $e?->getMessage() ?? '');
@@ -803,6 +803,68 @@ public function test_it_ingests_immediately_when_buffer_is_empty_and_a_payload_o
803803 $ingestDetailsBrowser->assertPending([]);
804804 }
805805
806+ public function test_it_ingests_immediately_when_incoming_payload_will_put_buffer_over_the_threshold(): void
807+ {
808+ $loop = new LoopFake(runForSeconds: 14);
809+ $server = new TcpServerFake;
810+ $ingestDetailsBrowser = new BrowserFake([
811+ Response::jwt(),
812+ ]);
813+ $ingestBrowser = new BrowserFake([
814+ Response::ingested(),
815+ Response::ingested(),
816+ ]);
817+ $loop->addTimer(0, $server->pendingConnection([['t' => 'request']]));
818+ $loop->addTimer(1, $server->pendingConnection([['t' => 'request']]));
819+ $loop->addTimer(2, $server->pendingConnection([['t' => 'request']]));
820+ $loop->addTimer(3, $server->pendingConnection([['t' => 'request']]));
821+
822+ [$output, $e] = $this->runAgent(
823+ via: 'source',
824+ ingestDetailsBrowser: $ingestDetailsBrowser,
825+ ingestBrowser: $ingestBrowser,
826+ loop: $loop,
827+ server: $server,
828+ maxBufferLength: 61,
829+ );
830+
831+ $this->assertNull($e, $e?->getMessage() ?? '');
832+ $this->assertLogMatches(<<<'OUTPUT'
833+ {date} {info} Authentication successful {duration}
834+ {date} {info} Ingest successful {duration}
835+ {date} {info} Ingest successful {duration}
836+ OUTPUT, $output);
837+ $ingestBrowser->assertSent([
838+ Request::ingest([
839+ ['t' => 'request'],
840+ ['t' => 'request'],
841+ ['t' => 'request'],
842+ ]),
843+ Request::ingest([
844+ ['t' => 'request'],
845+ ]),
846+ ]);
847+ $ingestBrowser->assertProcessing([]);
848+ $ingestBrowser->assertPending([]);
849+ $loop->assertRun([
850+ new Timer(interval: 0, runAt: 0, scheduledAt: 0, scheduledBy: $this->functionName()),
851+ new Timer(interval: 1, runAt: 1, scheduledAt: 0, scheduledBy: $this->functionName()),
852+ new Timer(interval: 2, runAt: 2, scheduledAt: 0, scheduledBy: $this->functionName()),
853+ new Timer(interval: 3, runAt: 3, scheduledAt: 0, scheduledBy: $this->functionName()),
854+ new Timer(interval: 10, runAt: 13, scheduledAt: 3, scheduledBy: 'Laravel\NightwatchAgent\Ingest::write'),
855+ ]);
856+ $loop->assertCanceled([
857+ new Timer(interval: 10, canceledAt: 3, scheduledAt: 0, scheduledBy: 'Laravel\NightwatchAgent\Ingest::write'),
858+ ]);
859+ $loop->assertPending([
860+ new Timer(interval: 3_600, runAt: 3_600, scheduledAt: 0, scheduledBy: 'Laravel\NightwatchAgent\IngestDetailsRepository::scheduleRefreshIn'),
861+ ]);
862+ $ingestDetailsBrowser->assertSent([
863+ Request::json('/api/agent-auth'),
864+ ]);
865+ $ingestDetailsBrowser->assertPending([]);
866+ }
867+
806868 public function test_it_stops_ingesting_data_when_exceeding_quota_during_request(): void
807869 {
808870 $loop = new LoopFake(runForSeconds: 60);
0 commit comments