@@ -20,19 +20,22 @@ describe("handleOrbIngest()", () => {
2020 expect ( await handleOrbIngest ( "{not json}" , makeDb ( ) ) ) . toEqual ( { error : "invalid_json" } ) ;
2121 } ) ;
2222
23- it ( "returns invalid_payload: instance_id not a string / events not an array / empty instance / empty events" , async ( ) => {
23+ it ( "returns invalid_payload: instance_id not a string / events not an array / empty/oversized instance / empty events" , async ( ) => {
2424 const db = makeDb ( ) ;
2525 expect ( await handleOrbIngest ( JSON . stringify ( { instance_id : 123 , events : [ ] } ) , db ) ) . toEqual ( { error : "invalid_payload" } ) ;
2626 expect ( await handleOrbIngest ( JSON . stringify ( { instance_id : "abc" , events : "bad" } ) , db ) ) . toEqual ( { error : "invalid_payload" } ) ;
2727 expect ( await handleOrbIngest ( JSON . stringify ( { instance_id : "" , events : [ ev ( ) ] } ) , db ) ) . toEqual ( { error : "invalid_payload" } ) ;
2828 expect ( await handleOrbIngest ( JSON . stringify ( { instance_id : "abc" , events : [ ] } ) , db ) ) . toEqual ( { error : "invalid_payload" } ) ;
29+ expect ( await handleOrbIngest ( JSON . stringify ( { instance_id : "i" . repeat ( 65 ) , events : [ ev ( ) ] } ) , db ) ) . toEqual ( { error : "invalid_payload" } ) ;
2930 } ) ;
3031
3132 it ( "skips events with bad repo_hash / pr_hash / outcome" , async ( ) => {
3233 expect ( await ingest ( makeDb ( ) , [ ev ( { repo_hash : 99 } ) ] ) ) . toEqual ( { accepted : 0 } ) ;
3334 expect ( await ingest ( makeDb ( ) , [ ev ( { repo_hash : "" } ) ] ) ) . toEqual ( { accepted : 0 } ) ;
35+ expect ( await ingest ( makeDb ( ) , [ ev ( { repo_hash : "r" . repeat ( 129 ) } ) ] ) ) . toEqual ( { accepted : 0 } ) ;
3436 expect ( await ingest ( makeDb ( ) , [ ev ( { pr_hash : null } ) ] ) ) . toEqual ( { accepted : 0 } ) ;
3537 expect ( await ingest ( makeDb ( ) , [ ev ( { pr_hash : "" } ) ] ) ) . toEqual ( { accepted : 0 } ) ;
38+ expect ( await ingest ( makeDb ( ) , [ ev ( { pr_hash : "p" . repeat ( 129 ) } ) ] ) ) . toEqual ( { accepted : 0 } ) ;
3639 expect ( await ingest ( makeDb ( ) , [ ev ( { outcome : "opened" } ) ] ) ) . toEqual ( { accepted : 0 } ) ;
3740 } ) ;
3841
@@ -57,9 +60,10 @@ describe("handleOrbIngest()", () => {
5760
5861 it ( "stores gate_reasoncode_bucket string vs null" , async ( ) => {
5962 const db = makeDb ( ) ;
60- await ingest ( db , [ ev ( { pr_hash : "b1" , gate_reasoncode_bucket : "duplicate_risk" } ) , ev ( { pr_hash : "b2" } ) ] ) ;
63+ await ingest ( db , [ ev ( { pr_hash : "b1" , gate_reasoncode_bucket : "duplicate_risk" } ) , ev ( { pr_hash : "b2" } ) , ev ( { pr_hash : "b3" , gate_reasoncode_bucket : "b" . repeat ( 65 ) } ) ] ) ;
6164 expect ( await col ( db , "b1" , "gate_reasoncode_bucket" ) ) . toBe ( "duplicate_risk" ) ;
6265 expect ( await col ( db , "b2" , "gate_reasoncode_bucket" ) ) . toBeNull ( ) ;
66+ expect ( await col ( db , "b3" , "gate_reasoncode_bucket" ) ) . toBeNull ( ) ;
6367 } ) ;
6468
6569 it ( "clamps time_to_close_ms: valid kept; absent / <1s / >1y → null" , async ( ) => {
@@ -212,6 +216,21 @@ describe("POST /v1/orb/ingest route", () => {
212216 expect ( res . status ) . toBe ( 413 ) ;
213217 expect ( ( ( await res . json ( ) ) as { error : string } ) . error ) . toBe ( "payload_too_large" ) ;
214218 } ) ;
219+
220+ it ( "optional collector token (#1285): open when unset; enforced once ORB_INGEST_TOKEN is set" , async ( ) => {
221+ const body = JSON . stringify ( { instance_id : "abc0" , events : [ { repo_hash : "rhash" , pr_hash : "phash" , outcome : "merged" } ] } ) ;
222+ const post = ( env : Env , authorization ?: string ) =>
223+ app . request ( "/v1/orb/ingest" , { method : "POST" , headers : { "content-type" : "application/json" , ...( authorization ? { authorization } : { } ) } , body } , env ) ;
224+
225+ // Token UNSET → open ingress (the live fleet keeps working with no auth header).
226+ expect ( ( await post ( createTestEnv ( ) ) ) . status ) . toBe ( 200 ) ;
227+ // Token SET → a missing or wrong bearer is rejected before the body is parsed.
228+ const env = createTestEnv ( { ORB_INGEST_TOKEN : "fleet-secret" } ) ;
229+ expect ( ( await post ( env ) ) . status ) . toBe ( 401 ) ;
230+ expect ( ( await post ( env , "Bearer wrong" ) ) . status ) . toBe ( 401 ) ;
231+ // Token SET + the matching bearer → accepted.
232+ expect ( ( await post ( env , "Bearer fleet-secret" ) ) . status ) . toBe ( 200 ) ;
233+ } ) ;
215234} ) ;
216235
217236describe ( "Orb instance registry routes (/v1/internal/orb/instances)" , ( ) => {
0 commit comments