@@ -547,7 +547,6 @@ func TestListIndexesAdvanced(t *testing.T) {
547547 Tags : []string {"vehicle" , "telemetry" , "status" },
548548 }
549549
550- // Add an event with different tags for testing ArrayFilterOption
551550 eventIdx4 := & cloudevent.CloudEventHeader {
552551 ID : "event-source3-producer4" ,
553552 Subject : subject1 ,
@@ -577,10 +576,10 @@ func TestListIndexesAdvanced(t *testing.T) {
577576 name : "filter by single type status events" ,
578577 advancedOpts : & grpc.AdvancedSearchOptions {
579578 Subject : & grpc.StringFilterOption {
580- HasAny : []string {subject1 },
579+ In : []string {subject1 },
581580 },
582581 Type : & grpc.StringFilterOption {
583- HasAny : []string {cloudevent .TypeStatus },
582+ In : []string {cloudevent .TypeStatus },
584583 },
585584 },
586585 expectedIndexKeys : []string {keyTypeStatusSource3Producer4 , keyTypeStatusSource1Producer3 , keyTypeStatusSource1Producer1 },
@@ -589,10 +588,10 @@ func TestListIndexesAdvanced(t *testing.T) {
589588 name : "filter by multiple types with OR logic" ,
590589 advancedOpts : & grpc.AdvancedSearchOptions {
591590 Subject : & grpc.StringFilterOption {
592- HasAny : []string {subject1 },
591+ In : []string {subject1 },
593592 },
594593 Type : & grpc.StringFilterOption {
595- HasAny : []string {cloudevent .TypeStatus , cloudevent .TypeFingerprint },
594+ In : []string {cloudevent .TypeStatus , cloudevent .TypeFingerprint },
596595 },
597596 },
598597 expectedIndexKeys : []string {keyTypeStatusSource3Producer4 , keyTypeStatusSource1Producer3 , keyTypeFingerprintSource2Producer2 , keyTypeStatusSource1Producer1 },
@@ -601,11 +600,10 @@ func TestListIndexesAdvanced(t *testing.T) {
601600 name : "filter by type with negation" ,
602601 advancedOpts : & grpc.AdvancedSearchOptions {
603602 Subject : & grpc.StringFilterOption {
604- HasAny : []string {subject1 },
603+ In : []string {subject1 },
605604 },
606605 Type : & grpc.StringFilterOption {
607- HasAny : []string {cloudevent .TypeFingerprint },
608- Negate : true ,
606+ NotIn : []string {cloudevent .TypeFingerprint },
609607 },
610608 },
611609 expectedIndexKeys : []string {keyTypeStatusSource3Producer4 , keyTypeStatusSource1Producer3 , keyTypeStatusSource1Producer1 },
@@ -614,10 +612,10 @@ func TestListIndexesAdvanced(t *testing.T) {
614612 name : "filter by source: multiple results" ,
615613 advancedOpts : & grpc.AdvancedSearchOptions {
616614 Subject : & grpc.StringFilterOption {
617- HasAny : []string {subject1 },
615+ In : []string {subject1 },
618616 },
619617 Source : & grpc.StringFilterOption {
620- HasAny : []string {"source-1" },
618+ In : []string {"source-1" },
621619 },
622620 },
623621 expectedIndexKeys : []string {keyTypeStatusSource1Producer3 , keyTypeStatusSource1Producer1 },
@@ -626,13 +624,13 @@ func TestListIndexesAdvanced(t *testing.T) {
626624 name : "combine multiple filters (AND logic)" ,
627625 advancedOpts : & grpc.AdvancedSearchOptions {
628626 Subject : & grpc.StringFilterOption {
629- HasAny : []string {subject1 },
627+ In : []string {subject1 },
630628 },
631629 Type : & grpc.StringFilterOption {
632- HasAny : []string {cloudevent .TypeStatus },
630+ In : []string {cloudevent .TypeStatus },
633631 },
634632 Source : & grpc.StringFilterOption {
635- HasAny : []string {"source-1" },
633+ In : []string {"source-1" },
636634 },
637635 },
638636 expectedIndexKeys : []string {keyTypeStatusSource1Producer3 , keyTypeStatusSource1Producer1 },
@@ -641,13 +639,12 @@ func TestListIndexesAdvanced(t *testing.T) {
641639 name : "OR logic within StringFilterOption" ,
642640 advancedOpts : & grpc.AdvancedSearchOptions {
643641 Subject : & grpc.StringFilterOption {
644- HasAny : []string {subject1 },
642+ In : []string {subject1 },
645643 },
646644 Type : & grpc.StringFilterOption {
647- HasAny : []string {cloudevent .TypeAttestation },
648- Or : & grpc.StringFilterOption {
649- HasAny : []string {cloudevent .TypeStatus },
650- Negate : true ,
645+ In : []string {cloudevent .TypeAttestation },
646+ Or : []* grpc.StringFilterOption {
647+ {NotIn : []string {cloudevent .TypeStatus }},
651648 },
652649 },
653650 },
@@ -657,10 +654,10 @@ func TestListIndexesAdvanced(t *testing.T) {
657654 name : "no matching records" ,
658655 advancedOpts : & grpc.AdvancedSearchOptions {
659656 Subject : & grpc.StringFilterOption {
660- HasAny : []string {subject1 },
657+ In : []string {subject1 },
661658 },
662659 Type : & grpc.StringFilterOption {
663- HasAny : []string {"non-existent-type" },
660+ In : []string {"non-existent-type" },
664661 },
665662 },
666663 expectedIndexKeys : []string {},
@@ -670,10 +667,10 @@ func TestListIndexesAdvanced(t *testing.T) {
670667 name : "filter by tags: has any (telemetry)" ,
671668 advancedOpts : & grpc.AdvancedSearchOptions {
672669 Subject : & grpc.StringFilterOption {
673- HasAny : []string {subject1 },
670+ In : []string {subject1 },
674671 },
675672 Tags : & grpc.ArrayFilterOption {
676- HasAny : []string {"telemetry" },
673+ ContainsAny : []string {"telemetry" },
677674 },
678675 },
679676 expectedIndexKeys : []string {keyTypeStatusSource3Producer4 , keyTypeStatusSource1Producer3 },
@@ -682,10 +679,10 @@ func TestListIndexesAdvanced(t *testing.T) {
682679 name : "filter by tags: has all (vehicle AND status)" ,
683680 advancedOpts : & grpc.AdvancedSearchOptions {
684681 Subject : & grpc.StringFilterOption {
685- HasAny : []string {subject1 },
682+ In : []string {subject1 },
686683 },
687684 Tags : & grpc.ArrayFilterOption {
688- HasAll : []string {"vehicle" , "status" },
685+ ContainsAll : []string {"vehicle" , "status" },
689686 },
690687 },
691688 expectedIndexKeys : []string {keyTypeStatusSource1Producer3 , keyTypeStatusSource1Producer1 },
@@ -694,23 +691,25 @@ func TestListIndexesAdvanced(t *testing.T) {
694691 name : "filter by tags: has any with multiple values" ,
695692 advancedOpts : & grpc.AdvancedSearchOptions {
696693 Subject : & grpc.StringFilterOption {
697- HasAny : []string {subject1 },
694+ In : []string {subject1 },
698695 },
699696 Tags : & grpc.ArrayFilterOption {
700- HasAny : []string {"security" , "realtime" },
697+ ContainsAny : []string {"security" , "realtime" },
698+ Or : []* grpc.ArrayFilterOption {
699+ {ContainsAll : []string {"vehicle" , "status" }},
700+ },
701701 },
702702 },
703- expectedIndexKeys : []string {keyTypeStatusSource3Producer4 , keyTypeFingerprintSource2Producer2 },
703+ expectedIndexKeys : []string {keyTypeStatusSource3Producer4 , keyTypeStatusSource1Producer3 , keyTypeFingerprintSource2Producer2 , keyTypeStatusSource1Producer1 },
704704 },
705705 {
706706 name : "filter by tags: negated has_any" ,
707707 advancedOpts : & grpc.AdvancedSearchOptions {
708708 Subject : & grpc.StringFilterOption {
709- HasAny : []string {subject1 },
709+ In : []string {subject1 },
710710 },
711711 Tags : & grpc.ArrayFilterOption {
712- HasAny : []string {"vehicle" },
713- Negate : true ,
712+ NotContainsAny : []string {"vehicle" },
714713 },
715714 },
716715 expectedIndexKeys : []string {keyTypeStatusSource3Producer4 , keyTypeFingerprintSource2Producer2 },
@@ -719,12 +718,12 @@ func TestListIndexesAdvanced(t *testing.T) {
719718 name : "complex tags filter: has_any OR has_all combination" ,
720719 advancedOpts : & grpc.AdvancedSearchOptions {
721720 Subject : & grpc.StringFilterOption {
722- HasAny : []string {subject1 },
721+ In : []string {subject1 },
723722 },
724723 Tags : & grpc.ArrayFilterOption {
725- HasAny : []string {"fingerprint" },
726- Or : & grpc.ArrayFilterOption {
727- HasAll : []string {"telemetry" , "realtime" },
724+ ContainsAny : []string {"fingerprint" },
725+ Or : [] * grpc.ArrayFilterOption {
726+ { ContainsAll : []string {"telemetry" , "realtime" } },
728727 },
729728 },
730729 },
@@ -734,12 +733,12 @@ func TestListIndexesAdvanced(t *testing.T) {
734733 name : "complex tags filter: has_all with OR chain" ,
735734 advancedOpts : & grpc.AdvancedSearchOptions {
736735 Subject : & grpc.StringFilterOption {
737- HasAny : []string {subject1 },
736+ In : []string {subject1 },
738737 },
739738 Tags : & grpc.ArrayFilterOption {
740- HasAll : []string {"vehicle" , "telemetry" },
741- Or : & grpc.ArrayFilterOption {
742- HasAny : []string {"security" },
739+ ContainsAll : []string {"vehicle" , "telemetry" },
740+ Or : [] * grpc.ArrayFilterOption {
741+ { ContainsAny : []string {"security" } },
743742 },
744743 },
745744 },
@@ -749,23 +748,37 @@ func TestListIndexesAdvanced(t *testing.T) {
749748 name : "complex negated tags with multiple conditions" ,
750749 advancedOpts : & grpc.AdvancedSearchOptions {
751750 Subject : & grpc.StringFilterOption {
752- HasAny : []string {subject1 },
751+ In : []string {subject1 },
753752 },
754753 Tags : & grpc.ArrayFilterOption {
755- HasAny : []string {"fingerprint" , "telemetry" },
756- Negate : true , // Does NOT have fingerprint or telemetry
757- Or : & grpc.ArrayFilterOption {
758- HasAll : []string {"telemetry" , "status" },
754+ NotContainsAny : []string {"fingerprint" , "telemetry" },
755+ Or : []* grpc.ArrayFilterOption {
756+ {ContainsAll : []string {"telemetry" , "status" }},
759757 },
760758 },
761759 },
762760 expectedIndexKeys : []string {keyTypeStatusSource1Producer3 , keyTypeStatusSource1Producer1 },
763761 },
762+ {
763+ name : "complex negated tags with or override" ,
764+ advancedOpts : & grpc.AdvancedSearchOptions {
765+ Subject : & grpc.StringFilterOption {
766+ In : []string {subject1 },
767+ },
768+ Tags : & grpc.ArrayFilterOption {
769+ ContainsAll : []string {"vehicle" , "telemetry" },
770+ NotContainsAny : []string {"fingerprint" , "telemetry" , "security" },
771+ Or : []* grpc.ArrayFilterOption {
772+ {ContainsAll : []string {"telemetry" , "status" }},
773+ },
774+ },
775+ },
776+ expectedIndexKeys : []string {keyTypeStatusSource1Producer3 },
777+ },
764778 }
765779
766780 for _ , tt := range tests {
767781 t .Run (tt .name , func (t * testing.T ) {
768- t .Parallel ()
769782 results , err := indexService .ListIndexesAdvanced (t .Context (), 10 , tt .advancedOpts )
770783 if tt .expectedError {
771784 require .Error (t , err , "Expected error but got none" )
0 commit comments