Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitee7341e

Browse files
committed
chore: add DERPForcedWebsocket to nodeUpdater
1 parentd52fab0 commitee7341e

File tree

2 files changed

+95
-8
lines changed

2 files changed

+95
-8
lines changed

‎tailnet/node.go‎

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -86,12 +86,13 @@ func newNodeUpdater(
8686
id tailcfg.NodeID,np key.NodePublic,dp key.DiscoPublic,
8787
)*nodeUpdater {
8888
u:=&nodeUpdater{
89-
phased:phased{Cond:*(sync.NewCond(&sync.Mutex{}))},
90-
logger:logger,
91-
id:id,
92-
key:np,
93-
discoKey:dp,
94-
callback:callback,
89+
phased:phased{Cond:*(sync.NewCond(&sync.Mutex{}))},
90+
logger:logger,
91+
id:id,
92+
key:np,
93+
discoKey:dp,
94+
derpForcedWebsockets:make(map[int]string),
95+
callback:callback,
9596
}
9697
gou.updateLoop()
9798
returnu
@@ -132,3 +133,14 @@ func (u *nodeUpdater) setNetInfo(ni *tailcfg.NetInfo) {
132133
u.Broadcast()
133134
}
134135
}
136+
137+
func (u*nodeUpdater)setDERPForcedWebsocket(regionint,reasonstring) {
138+
u.L.Lock()
139+
deferu.L.Unlock()
140+
dirty:=u.derpForcedWebsockets[region]!=reason
141+
u.derpForcedWebsockets[region]=reason
142+
ifdirty {
143+
u.dirty=true
144+
u.Broadcast()
145+
}
146+
}

‎tailnet/node_internal_test.go‎

Lines changed: 77 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,10 @@ func TestNodeUpdater_setNetInfo_same(t *testing.T) {
7474
nodeKey:=key.NewNode().Public()
7575
discoKey:=key.NewDisco().Public()
7676
nodeCh:=make(chan*Node)
77-
goCh:=make(chanstruct{})
7877
uut:=newNodeUpdater(
7978
logger,
8079
func(n*Node) {
8180
nodeCh<-n
82-
<-goCh
8381
},
8482
id,nodeKey,discoKey,
8583
)
@@ -108,3 +106,80 @@ func TestNodeUpdater_setNetInfo_same(t *testing.T) {
108106
}()
109107
_=testutil.RequireRecvCtx(ctx,t,done)
110108
}
109+
110+
funcTestNodeUpdater_setDERPForcedWebsocket_different(t*testing.T) {
111+
t.Parallel()
112+
ctx:=testutil.Context(t,testutil.WaitShort)
113+
logger:=slogtest.Make(t,nil).Leveled(slog.LevelDebug)
114+
id:=tailcfg.NodeID(1)
115+
nodeKey:=key.NewNode().Public()
116+
discoKey:=key.NewDisco().Public()
117+
nodeCh:=make(chan*Node)
118+
uut:=newNodeUpdater(
119+
logger,
120+
func(n*Node) {
121+
nodeCh<-n
122+
},
123+
id,nodeKey,discoKey,
124+
)
125+
deferuut.close()
126+
127+
// Given: preferred DERP is 1, so we'll send an update
128+
uut.L.Lock()
129+
uut.preferredDERP=1
130+
uut.L.Unlock()
131+
132+
// When: we set a new forced websocket reason
133+
uut.setDERPForcedWebsocket(1,"test")
134+
135+
// Then: we receive an update with the reason set
136+
node:=testutil.RequireRecvCtx(ctx,t,nodeCh)
137+
require.Equal(t,nodeKey,node.Key)
138+
require.Equal(t,discoKey,node.DiscoKey)
139+
require.True(t,maps.Equal(map[int]string{1:"test"},node.DERPForcedWebsocket))
140+
141+
done:=make(chanstruct{})
142+
gofunc() {
143+
deferclose(done)
144+
uut.close()
145+
}()
146+
_=testutil.RequireRecvCtx(ctx,t,done)
147+
}
148+
149+
funcTestNodeUpdater_setDERPForcedWebsocket_same(t*testing.T) {
150+
t.Parallel()
151+
ctx:=testutil.Context(t,testutil.WaitShort)
152+
logger:=slogtest.Make(t,nil).Leveled(slog.LevelDebug)
153+
id:=tailcfg.NodeID(1)
154+
nodeKey:=key.NewNode().Public()
155+
discoKey:=key.NewDisco().Public()
156+
nodeCh:=make(chan*Node)
157+
uut:=newNodeUpdater(
158+
logger,
159+
func(n*Node) {
160+
nodeCh<-n
161+
},
162+
id,nodeKey,discoKey,
163+
)
164+
deferuut.close()
165+
166+
// Then: we don't configure
167+
requireNeverConfigures(ctx,t,&uut.phased)
168+
169+
// Given: preferred DERP is 1, so we would send an update on change &&
170+
// reason for region 1 is set to "test"
171+
uut.L.Lock()
172+
uut.preferredDERP=1
173+
uut.derpForcedWebsockets[1]="test"
174+
uut.L.Unlock()
175+
176+
// When: we set region 1 to "test
177+
uut.setDERPForcedWebsocket(1,"test")
178+
179+
done:=make(chanstruct{})
180+
gofunc() {
181+
deferclose(done)
182+
uut.close()
183+
}()
184+
_=testutil.RequireRecvCtx(ctx,t,done)
185+
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp