@@ -3,6 +3,7 @@ package tailnet_test
33import (
44"context"
55"net/netip"
6+ "strings"
67"testing"
78"time"
89
@@ -30,7 +31,7 @@ func TestTailnet(t *testing.T) {
3031t .Parallel ()
3132logger := slogtest .Make (t ,nil ).Leveled (slog .LevelDebug )
3233conn ,err := tailnet .NewConn (& tailnet.Options {
33- Addresses : []netip.Prefix {netip . PrefixFrom ( tailnet .IP (), 128 )},
34+ Addresses : []netip.Prefix {tailnet .TailscaleServicePrefix . RandomPrefix ( )},
3435Logger :logger .Named ("w1" ),
3536DERPMap :derpMap ,
3637})
@@ -42,7 +43,7 @@ func TestTailnet(t *testing.T) {
4243t .Parallel ()
4344logger := slogtest .Make (t ,nil ).Leveled (slog .LevelDebug )
4445ctx := testutil .Context (t ,testutil .WaitLong )
45- w1IP := tailnet .IP ()
46+ w1IP := tailnet .TailscaleServicePrefix . RandomAddr ()
4647w1 ,err := tailnet .NewConn (& tailnet.Options {
4748Addresses : []netip.Prefix {netip .PrefixFrom (w1IP ,128 )},
4849Logger :logger .Named ("w1" ),
@@ -51,7 +52,7 @@ func TestTailnet(t *testing.T) {
5152require .NoError (t ,err )
5253
5354w2 ,err := tailnet .NewConn (& tailnet.Options {
54- Addresses : []netip.Prefix {netip . PrefixFrom ( tailnet .IP (), 128 )},
55+ Addresses : []netip.Prefix {tailnet .TailscaleServicePrefix . RandomPrefix ( )},
5556Logger :logger .Named ("w2" ),
5657DERPMap :derpMap ,
5758})
@@ -106,7 +107,7 @@ func TestTailnet(t *testing.T) {
106107logger := slogtest .Make (t ,nil ).Leveled (slog .LevelDebug )
107108ctx := testutil .Context (t ,testutil .WaitMedium )
108109
109- w1IP := tailnet .IP ()
110+ w1IP := tailnet .TailscaleServicePrefix . RandomAddr ()
110111derpMap := tailnettest .RunDERPOnlyWebSockets (t )
111112w1 ,err := tailnet .NewConn (& tailnet.Options {
112113Addresses : []netip.Prefix {netip .PrefixFrom (w1IP ,128 )},
@@ -117,7 +118,7 @@ func TestTailnet(t *testing.T) {
117118require .NoError (t ,err )
118119
119120w2 ,err := tailnet .NewConn (& tailnet.Options {
120- Addresses : []netip.Prefix {netip . PrefixFrom ( tailnet .IP (), 128 )},
121+ Addresses : []netip.Prefix {tailnet .TailscaleServicePrefix . RandomPrefix ( )},
121122Logger :logger .Named ("w2" ),
122123DERPMap :derpMap ,
123124BlockEndpoints :true ,
@@ -168,7 +169,7 @@ func TestTailnet(t *testing.T) {
168169t .Parallel ()
169170logger := slogtest .Make (t ,nil ).Leveled (slog .LevelDebug )
170171ctx := testutil .Context (t ,testutil .WaitLong )
171- w1IP := tailnet .IP ()
172+ w1IP := tailnet .TailscaleServicePrefix . RandomAddr ()
172173w1 ,err := tailnet .NewConn (& tailnet.Options {
173174Addresses : []netip.Prefix {netip .PrefixFrom (w1IP ,128 )},
174175Logger :logger .Named ("w1" ),
@@ -177,7 +178,7 @@ func TestTailnet(t *testing.T) {
177178require .NoError (t ,err )
178179
179180w2 ,err := tailnet .NewConn (& tailnet.Options {
180- Addresses : []netip.Prefix {netip . PrefixFrom ( tailnet .IP (), 128 )},
181+ Addresses : []netip.Prefix {tailnet .TailscaleServicePrefix . RandomPrefix ( )},
181182Logger :logger .Named ("w2" ),
182183DERPMap :derpMap ,
183184})
@@ -211,7 +212,7 @@ func TestTailnet(t *testing.T) {
211212t .Parallel ()
212213logger := slogtest .Make (t ,nil ).Leveled (slog .LevelDebug )
213214ctx := testutil .Context (t ,testutil .WaitLong )
214- w1IP := tailnet .IP ()
215+ w1IP := tailnet .TailscaleServicePrefix . RandomAddr ()
215216w1 ,err := tailnet .NewConn (& tailnet.Options {
216217Addresses : []netip.Prefix {netip .PrefixFrom (w1IP ,128 )},
217218Logger :logger .Named ("w1" ),
@@ -221,7 +222,7 @@ func TestTailnet(t *testing.T) {
221222require .NoError (t ,err )
222223
223224w2 ,err := tailnet .NewConn (& tailnet.Options {
224- Addresses : []netip.Prefix {netip . PrefixFrom ( tailnet .IP (), 128 )},
225+ Addresses : []netip.Prefix {tailnet .TailscaleServicePrefix . RandomPrefix ( )},
225226Logger :logger .Named ("w2" ),
226227DERPMap :derpMap ,
227228BlockEndpoints :true ,
@@ -261,7 +262,7 @@ func TestConn_PreferredDERP(t *testing.T) {
261262logger := slogtest .Make (t ,nil ).Leveled (slog .LevelDebug )
262263derpMap ,_ := tailnettest .RunDERPAndSTUN (t )
263264conn ,err := tailnet .NewConn (& tailnet.Options {
264- Addresses : []netip.Prefix {netip . PrefixFrom ( tailnet .IP (), 128 )},
265+ Addresses : []netip.Prefix {tailnet .TailscaleServicePrefix . RandomPrefix ( )},
265266Logger :logger .Named ("w1" ),
266267DERPMap :derpMap ,
267268})
@@ -290,7 +291,7 @@ func TestConn_UpdateDERP(t *testing.T) {
290291logger := slogtest .Make (t ,nil ).Leveled (slog .LevelDebug )
291292
292293derpMap1 ,_ := tailnettest .RunDERPAndSTUN (t )
293- ip := tailnet .IP ()
294+ ip := tailnet .TailscaleServicePrefix . RandomAddr ()
294295conn ,err := tailnet .NewConn (& tailnet.Options {
295296Addresses : []netip.Prefix {netip .PrefixFrom (ip ,128 )},
296297Logger :logger .Named ("w1" ),
@@ -320,7 +321,7 @@ func TestConn_UpdateDERP(t *testing.T) {
320321
321322// Connect from a different client.
322323client1 ,err := tailnet .NewConn (& tailnet.Options {
323- Addresses : []netip.Prefix {netip . PrefixFrom ( tailnet .IP (), 128 )},
324+ Addresses : []netip.Prefix {tailnet .TailscaleServicePrefix . RandomPrefix ( )},
324325Logger :logger .Named ("client1" ),
325326DERPMap :derpMap1 ,
326327BlockEndpoints :true ,
@@ -394,7 +395,7 @@ parentLoop:
394395// Connect from a different different client with up-to-date derp map and
395396// nodes.
396397client2 ,err := tailnet .NewConn (& tailnet.Options {
397- Addresses : []netip.Prefix {netip . PrefixFrom ( tailnet .IP (), 128 )},
398+ Addresses : []netip.Prefix {tailnet .TailscaleServicePrefix . RandomPrefix ( )},
398399Logger :logger .Named ("client2" ),
399400DERPMap :derpMap2 ,
400401BlockEndpoints :true ,
@@ -425,7 +426,7 @@ func TestConn_BlockEndpoints(t *testing.T) {
425426derpMap ,_ := tailnettest .RunDERPAndSTUN (t )
426427
427428// Setup conn 1.
428- ip1 := tailnet .IP ()
429+ ip1 := tailnet .TailscaleServicePrefix . RandomAddr ()
429430conn1 ,err := tailnet .NewConn (& tailnet.Options {
430431Addresses : []netip.Prefix {netip .PrefixFrom (ip1 ,128 )},
431432Logger :logger .Named ("w1" ),
@@ -439,7 +440,7 @@ func TestConn_BlockEndpoints(t *testing.T) {
439440}()
440441
441442// Setup conn 2.
442- ip2 := tailnet .IP ()
443+ ip2 := tailnet .TailscaleServicePrefix . RandomAddr ()
443444conn2 ,err := tailnet .NewConn (& tailnet.Options {
444445Addresses : []netip.Prefix {netip .PrefixFrom (ip2 ,128 )},
445446Logger :logger .Named ("w2" ),
@@ -492,3 +493,31 @@ func stitch(t *testing.T, dst, src *tailnet.Conn) {
492493assert .NoError (t ,err )
493494})
494495}
496+
497+ func TestTailscaleServicePrefix (t * testing.T ) {
498+ t .Parallel ()
499+ a := tailnet .TailscaleServicePrefix .RandomAddr ()
500+ require .True (t ,strings .HasPrefix (a .String (),"fd7a:115c:a1e0" ))
501+ p := tailnet .TailscaleServicePrefix .RandomPrefix ()
502+ require .True (t ,strings .HasPrefix (p .String (),"fd7a:115c:a1e0" ))
503+ require .True (t ,strings .HasSuffix (p .String (),"/128" ))
504+ u := uuid .MustParse ("aaaaaaaa-aaaa-aaaa-aaaa-123456789abc" )
505+ a = tailnet .TailscaleServicePrefix .AddrFromUUID (u )
506+ require .Equal (t ,"fd7a:115c:a1e0:aaaa:aaaa:1234:5678:9abc" ,a .String ())
507+ p = tailnet .TailscaleServicePrefix .PrefixFromUUID (u )
508+ require .Equal (t ,"fd7a:115c:a1e0:aaaa:aaaa:1234:5678:9abc/128" ,p .String ())
509+ }
510+
511+ func TestCoderServicePrefix (t * testing.T ) {
512+ t .Parallel ()
513+ a := tailnet .CoderServicePrefix .RandomAddr ()
514+ require .True (t ,strings .HasPrefix (a .String (),"fd60:627a:a42b" ))
515+ p := tailnet .CoderServicePrefix .RandomPrefix ()
516+ require .True (t ,strings .HasPrefix (p .String (),"fd60:627a:a42b" ))
517+ require .True (t ,strings .HasSuffix (p .String (),"/128" ))
518+ u := uuid .MustParse ("aaaaaaaa-aaaa-aaaa-aaaa-123456789abc" )
519+ a = tailnet .CoderServicePrefix .AddrFromUUID (u )
520+ require .Equal (t ,"fd60:627a:a42b:aaaa:aaaa:1234:5678:9abc" ,a .String ())
521+ p = tailnet .CoderServicePrefix .PrefixFromUUID (u )
522+ require .Equal (t ,"fd60:627a:a42b:aaaa:aaaa:1234:5678:9abc/128" ,p .String ())
523+ }