55 "testing"
66
77 "github.com/stretchr/testify/assert"
8+
89 "github.com/tinyauthapp/tinyauth/internal/model"
910 "github.com/tinyauthapp/tinyauth/internal/utils/logger"
1011)
@@ -558,12 +559,12 @@ func TestIPAllowedRule(t *testing.T) {
558559 expected Effect
559560 }{
560561 {
561- name : "abstains when ACLs are nil" ,
562+ name : "allows when ACLs are nil and no global lists configured " ,
562563 ctx : & ACLContext {
563564 ACLs : nil ,
564565 IP : net .ParseIP ("10.0.0.1" ),
565566 },
566- expected : EffectAbstain ,
567+ expected : EffectAllow ,
567568 },
568569 {
569570 name : "denies when IP matches app block list" ,
@@ -669,23 +670,70 @@ func TestIPBypassedRule(t *testing.T) {
669670 log := logger .NewLogger ().WithTestConfig ()
670671 log .Init ()
671672
672- rule := & IPBypassedRule {Log : log }
673+ defaultIPBR := & IPBypassedRule {Log : log }
674+ globBypassIPBR := & IPBypassedRule {
675+ Log : log ,
676+ Config : model.Config {Auth : model.AuthConfig {IP : model.IPConfig {Bypass : []string {"10.0.0.0/24" }}}},
677+ }
673678
674679 tests := []struct {
675680 name string
681+ rule * IPBypassedRule
676682 ctx * ACLContext
677683 expected Effect
678684 }{
679685 {
680- name : "deny when ACLs are nil" ,
686+ name : "deny when ACLs are nil and no global bypass" ,
687+ rule : defaultIPBR ,
681688 ctx : & ACLContext {
682689 ACLs : nil ,
683690 IP : net .ParseIP ("10.0.0.1" ),
684691 },
685692 expected : EffectDeny ,
686693 },
694+ {
695+ name : "allows when ACLs are nil but IP matches global bypass" ,
696+ rule : globBypassIPBR ,
697+ ctx : & ACLContext {
698+ ACLs : nil ,
699+ IP : net .ParseIP ("10.0.0.5" ),
700+ },
701+ expected : EffectAllow ,
702+ },
703+ {
704+ name : "denies when ACLs are nil and IP does not match global bypass" ,
705+ rule : globBypassIPBR ,
706+ ctx : & ACLContext {
707+ ACLs : nil ,
708+ IP : net .ParseIP ("192.168.1.1" ),
709+ },
710+ expected : EffectDeny ,
711+ },
712+ {
713+ name : "allows when IP matches per-app bypass but not global bypass" ,
714+ rule : defaultIPBR ,
715+ ctx : & ACLContext {
716+ ACLs : & model.App {
717+ IP : model.AppIP {Bypass : []string {"10.0.0.0/24" }},
718+ },
719+ IP : net .ParseIP ("10.0.0.5" ),
720+ },
721+ expected : EffectAllow ,
722+ },
723+ {
724+ name : "allows when IP matches global bypass but not per-app bypass" ,
725+ rule : globBypassIPBR ,
726+ ctx : & ACLContext {
727+ ACLs : & model.App {
728+ IP : model.AppIP {Bypass : []string {"172.16.0.0/24" }},
729+ },
730+ IP : net .ParseIP ("10.0.0.5" ),
731+ },
732+ expected : EffectAllow ,
733+ },
687734 {
688735 name : "allows when IP matches bypass list" ,
736+ rule : defaultIPBR ,
689737 ctx : & ACLContext {
690738 ACLs : & model.App {
691739 IP : model.AppIP {Bypass : []string {"10.0.0.0/24" }},
@@ -696,6 +744,7 @@ func TestIPBypassedRule(t *testing.T) {
696744 },
697745 {
698746 name : "denies when IP does not match bypass list" ,
747+ rule : defaultIPBR ,
699748 ctx : & ACLContext {
700749 ACLs : & model.App {
701750 IP : model.AppIP {Bypass : []string {"10.0.0.0/24" }},
@@ -706,6 +755,7 @@ func TestIPBypassedRule(t *testing.T) {
706755 },
707756 {
708757 name : "denies when bypass list is empty" ,
758+ rule : defaultIPBR ,
709759 ctx : & ACLContext {
710760 ACLs : & model.App {},
711761 IP : net .ParseIP ("10.0.0.1" ),
@@ -714,6 +764,7 @@ func TestIPBypassedRule(t *testing.T) {
714764 },
715765 {
716766 name : "skips invalid bypass entries and allows on later match" ,
767+ rule : defaultIPBR ,
717768 ctx : & ACLContext {
718769 ACLs : & model.App {
719770 IP : model.AppIP {Bypass : []string {"not-an-ip" , "10.0.0.1" }},
@@ -726,7 +777,7 @@ func TestIPBypassedRule(t *testing.T) {
726777
727778 for _ , tt := range tests {
728779 t .Run (tt .name , func (t * testing.T ) {
729- assert .Equal (t , tt .expected , rule .Evaluate (tt .ctx ))
780+ assert .Equal (t , tt .expected , tt . rule .Evaluate (tt .ctx ))
730781 })
731782 }
732783}
0 commit comments