@@ -666,6 +666,59 @@ func TestRequestReleaseAddressFromSubPool(t *testing.T) {
666666 if ! types .CompareIPNet (rp , ip ) {
667667 t .Fatalf ("Unexpected IP from subpool. Expected: %s. Got: %v." , rp , ip )
668668 }
669+
670+ // Request any addresses from subpool after explicit address request
671+ unoExp , _ := types .ParseCIDR ("10.2.2.0/16" )
672+ dueExp , _ := types .ParseCIDR ("10.2.2.2/16" )
673+ treExp , _ := types .ParseCIDR ("10.2.2.1/16" )
674+ if poolID , _ , _ , err = a .RequestPool ("rosso" , "10.2.0.0/16" , "10.2.2.0/24" , nil , false ); err != nil {
675+ t .Fatal (err )
676+ }
677+ tre , _ , err := a .RequestAddress (poolID , treExp .IP , nil )
678+ if err != nil {
679+ t .Fatal (err )
680+ }
681+ if ! types .CompareIPNet (tre , treExp ) {
682+ t .Fatalf ("Unexpected address: %v" , tre )
683+ }
684+
685+ uno , _ , err := a .RequestAddress (poolID , nil , nil )
686+ if err != nil {
687+ t .Fatal (err )
688+ }
689+ if ! types .CompareIPNet (uno , unoExp ) {
690+ t .Fatalf ("Unexpected address: %v" , uno )
691+ }
692+
693+ due , _ , err := a .RequestAddress (poolID , nil , nil )
694+ if err != nil {
695+ t .Fatal (err )
696+ }
697+ if ! types .CompareIPNet (due , dueExp ) {
698+ t .Fatalf ("Unexpected address: %v" , due )
699+ }
700+
701+ if err = a .ReleaseAddress (poolID , uno .IP ); err != nil {
702+ t .Fatal (err )
703+ }
704+ uno , _ , err = a .RequestAddress (poolID , nil , nil )
705+ if err != nil {
706+ t .Fatal (err )
707+ }
708+ if ! types .CompareIPNet (uno , unoExp ) {
709+ t .Fatalf ("Unexpected address: %v" , uno )
710+ }
711+
712+ if err = a .ReleaseAddress (poolID , tre .IP ); err != nil {
713+ t .Fatal (err )
714+ }
715+ tre , _ , err = a .RequestAddress (poolID , nil , nil )
716+ if err != nil {
717+ t .Fatal (err )
718+ }
719+ if ! types .CompareIPNet (tre , treExp ) {
720+ t .Fatalf ("Unexpected address: %v" , tre )
721+ }
669722}
670723
671724func TestGetAddress (t * testing.T ) {
0 commit comments