@@ -5,6 +5,7 @@ package migrations_integration
55
66import (
77 "context"
8+ "fmt"
89 "log/slog"
910 "os"
1011 "time"
@@ -15,14 +16,15 @@ import (
1516 _ "github.com/metal-stack/metal-api/cmd/metal-api/internal/datastore/migrations"
1617 "github.com/metal-stack/metal-api/cmd/metal-api/internal/metal"
1718 "github.com/metal-stack/metal-api/test"
19+ r "gopkg.in/rethinkdb/rethinkdb-go.v6"
1820
1921 "testing"
2022
2123 "github.com/stretchr/testify/assert"
2224 "github.com/stretchr/testify/require"
2325)
2426
25- func Test_Migration (t * testing.T ) {
27+ func Test_MigrationProvisioningEventContainer (t * testing.T ) {
2628 container , c , err := test .StartRethink (t )
2729 require .NoError (t , err )
2830 defer func () {
@@ -125,3 +127,98 @@ func Test_Migration(t *testing.T) {
125127 assert .Equal (t , ec .Events [0 ].Time .Unix (), lastEventTime .Unix ())
126128 assert .Equal (t , ec .Events [1 ].Time .Unix (), now .Unix ())
127129}
130+
131+ func Test_MigrationChildPrefixLength (t * testing.T ) {
132+ type tmpPartition struct {
133+ ID string `rethinkdb:"id"`
134+ PrivateNetworkPrefixLength uint8 `rethinkdb:"privatenetworkprefixlength"`
135+ }
136+
137+ container , c , err := test .StartRethink (t )
138+ require .NoError (t , err )
139+ defer func () {
140+ _ = container .Terminate (context .Background ())
141+ }()
142+
143+ log := slog .New (slog .NewJSONHandler (os .Stdout , & slog.HandlerOptions {Level : slog .LevelDebug }))
144+
145+ rs := datastore .New (log , c .IP + ":" + c .Port , c .DB , c .User , c .Password )
146+ // limit poolsize to speed up initialization
147+ rs .VRFPoolRangeMin = 10000
148+ rs .VRFPoolRangeMax = 10010
149+ rs .ASNPoolRangeMin = 10000
150+ rs .ASNPoolRangeMax = 10010
151+
152+ err = rs .Connect ()
153+ require .NoError (t , err )
154+ err = rs .Initialize ()
155+ require .NoError (t , err )
156+
157+ var (
158+ p1 = & tmpPartition {
159+ ID : "p1" ,
160+ PrivateNetworkPrefixLength : 22 ,
161+ }
162+ p2 = & tmpPartition {
163+ ID : "p2" ,
164+ PrivateNetworkPrefixLength : 24 ,
165+ }
166+ n1 = & metal.Network {
167+ Base : metal.Base {
168+ ID : "n1" ,
169+ },
170+ PartitionID : "p1" ,
171+ PrivateSuper : true ,
172+ }
173+ n2 = & metal.Network {
174+ Base : metal.Base {
175+ ID : "n2" ,
176+ },
177+ PartitionID : "p2" ,
178+ PrivateSuper : true ,
179+ }
180+ n3 = & metal.Network {
181+ Base : metal.Base {
182+ ID : "n3" ,
183+ },
184+ PartitionID : "p2" ,
185+ PrivateSuper : false ,
186+ }
187+ )
188+ _ , err = r .DB ("metal" ).Table ("partition" ).Insert (p1 ).RunWrite (rs .Session ())
189+ require .NoError (t , err )
190+ _ , err = r .DB ("metal" ).Table ("partition" ).Insert (p2 ).RunWrite (rs .Session ())
191+ require .NoError (t , err )
192+
193+ err = rs .CreateNetwork (n1 )
194+ require .NoError (t , err )
195+ err = rs .CreateNetwork (n2 )
196+ require .NoError (t , err )
197+ err = rs .CreateNetwork (n3 )
198+ require .NoError (t , err )
199+
200+ err = rs .Migrate (nil , false )
201+ require .NoError (t , err )
202+
203+ p , err := rs .FindPartition (p1 .ID )
204+ require .NoError (t , err )
205+ require .NotNil (t , p )
206+ p , err = rs .FindPartition (p2 .ID )
207+ require .NoError (t , err )
208+ require .NotNil (t , p )
209+
210+ n1fetched , err := rs .FindNetworkByID (n1 .ID )
211+ require .NoError (t , err )
212+ require .NotNil (t , n1fetched )
213+ require .Equal (t , p1 .PrivateNetworkPrefixLength , * n1fetched .ChildPrefixLength , fmt .Sprintf ("childprefixlength:%d" , * n1fetched .ChildPrefixLength ))
214+
215+ n2fetched , err := rs .FindNetworkByID (n2 .ID )
216+ require .NoError (t , err )
217+ require .NotNil (t , n2fetched )
218+ require .Equal (t , p2 .PrivateNetworkPrefixLength , * n2fetched .ChildPrefixLength , fmt .Sprintf ("childprefixlength:%d" , * n2fetched .ChildPrefixLength ))
219+
220+ n3fetched , err := rs .FindNetworkByID (n3 .ID )
221+ require .NoError (t , err )
222+ require .NotNil (t , n3fetched )
223+ require .Nil (t , n3fetched .ChildPrefixLength )
224+ }
0 commit comments