mirror of
				https://github.com/tailscale/tailscale.git
				synced 2025-10-31 12:50:42 +00:00 
			
		
		
		
	ipn/ipnlocal, tstest/integration: add panic to catch flaky test in the act
Updates #11962 Change-Id: Ifa24b82f9c76639bfd83278a7c2fe9cf42897bbb Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
		 Brad Fitzpatrick
					Brad Fitzpatrick
				
			
				
					committed by
					
						 Brad Fitzpatrick
						Brad Fitzpatrick
					
				
			
			
				
	
			
			
			 Brad Fitzpatrick
						Brad Fitzpatrick
					
				
			
						parent
						
							258b5042fe
						
					
				
				
					commit
					7e0dd61e61
				
			| @@ -4278,6 +4278,15 @@ func (b *LocalBackend) enterStateLockedOnEntry(newState ipn.State, unlock unlock | |||||||
| 	oldState := b.state | 	oldState := b.state | ||||||
| 	b.state = newState | 	b.state = newState | ||||||
| 	prefs := b.pm.CurrentPrefs() | 	prefs := b.pm.CurrentPrefs() | ||||||
|  | 
 | ||||||
|  | 	// Some temporary (2024-05-05) debugging code to help us catch | ||||||
|  | 	// https://github.com/tailscale/tailscale/issues/11962 in the act. | ||||||
|  | 	if prefs.WantRunning() && | ||||||
|  | 		prefs.ControlURLOrDefault() == ipn.DefaultControlURL && | ||||||
|  | 		envknob.Bool("TS_PANIC_IF_HIT_MAIN_CONTROL") { | ||||||
|  | 		panic("[unexpected] use of main control server in integration test") | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	netMap := b.netMap | 	netMap := b.netMap | ||||||
| 	activeLogin := b.activeLogin | 	activeLogin := b.activeLogin | ||||||
| 	authURL := b.authURL | 	authURL := b.authURL | ||||||
|   | |||||||
| @@ -363,11 +363,17 @@ func TestTwoNodes(t *testing.T) { | |||||||
| 	t.Logf("node2 SOCKS5 addr: %v", n2Socks) | 	t.Logf("node2 SOCKS5 addr: %v", n2Socks) | ||||||
| 
 | 
 | ||||||
| 	n1.AwaitListening() | 	n1.AwaitListening() | ||||||
|  | 	t.Logf("n1 is listening") | ||||||
| 	n2.AwaitListening() | 	n2.AwaitListening() | ||||||
|  | 	t.Logf("n2 is listening") | ||||||
| 	n1.MustUp() | 	n1.MustUp() | ||||||
|  | 	t.Logf("n1 is up") | ||||||
| 	n2.MustUp() | 	n2.MustUp() | ||||||
|  | 	t.Logf("n2 is up") | ||||||
| 	n1.AwaitRunning() | 	n1.AwaitRunning() | ||||||
|  | 	t.Logf("n1 is running") | ||||||
| 	n2.AwaitRunning() | 	n2.AwaitRunning() | ||||||
|  | 	t.Logf("n2 is running") | ||||||
| 
 | 
 | ||||||
| 	if err := tstest.WaitFor(2*time.Second, func() error { | 	if err := tstest.WaitFor(2*time.Second, func() error { | ||||||
| 		st := n1.MustStatus() | 		st := n1.MustStatus() | ||||||
| @@ -1072,11 +1078,16 @@ func newTestNode(t *testing.T, env *testEnv) *testNode { | |||||||
| 
 | 
 | ||||||
| 	// Look for a data race. Once we see the start marker, start logging the rest. | 	// Look for a data race. Once we see the start marker, start logging the rest. | ||||||
| 	var sawRace bool | 	var sawRace bool | ||||||
|  | 	var sawPanic bool | ||||||
| 	n.addLogLineHook(func(line []byte) { | 	n.addLogLineHook(func(line []byte) { | ||||||
| 		if mem.Contains(mem.B(line), mem.S("WARNING: DATA RACE")) { | 		lineB := mem.B(line) | ||||||
|  | 		if mem.Contains(lineB, mem.S("WARNING: DATA RACE")) { | ||||||
| 			sawRace = true | 			sawRace = true | ||||||
| 		} | 		} | ||||||
| 		if sawRace { | 		if mem.HasPrefix(lineB, mem.S("panic: ")) { | ||||||
|  | 			sawPanic = true | ||||||
|  | 		} | ||||||
|  | 		if sawRace || sawPanic { | ||||||
| 			t.Logf("%s", line) | 			t.Logf("%s", line) | ||||||
| 		} | 		} | ||||||
| 	}) | 	}) | ||||||
| @@ -1250,6 +1261,7 @@ func (n *testNode) StartDaemonAsIPNGOOS(ipnGOOS string) *Daemon { | |||||||
| 		"TS_LOGS_DIR="+t.TempDir(), | 		"TS_LOGS_DIR="+t.TempDir(), | ||||||
| 		"TS_NETCHECK_GENERATE_204_URL="+n.env.ControlServer.URL+"/generate_204", | 		"TS_NETCHECK_GENERATE_204_URL="+n.env.ControlServer.URL+"/generate_204", | ||||||
| 		"TS_ASSUME_NETWORK_UP_FOR_TEST=1", // don't pause control client in airplane mode (no wifi, etc) | 		"TS_ASSUME_NETWORK_UP_FOR_TEST=1", // don't pause control client in airplane mode (no wifi, etc) | ||||||
|  | 		"TS_PANIC_IF_HIT_MAIN_CONTROL=1", | ||||||
| 	) | 	) | ||||||
| 	if version.IsRace() { | 	if version.IsRace() { | ||||||
| 		cmd.Env = append(cmd.Env, "GORACE=halt_on_error=1") | 		cmd.Env = append(cmd.Env, "GORACE=halt_on_error=1") | ||||||
| @@ -1479,7 +1491,7 @@ func (tt *trafficTrap) Err() error { | |||||||
| func (tt *trafficTrap) ServeHTTP(w http.ResponseWriter, r *http.Request) { | func (tt *trafficTrap) ServeHTTP(w http.ResponseWriter, r *http.Request) { | ||||||
| 	var got bytes.Buffer | 	var got bytes.Buffer | ||||||
| 	r.Write(&got) | 	r.Write(&got) | ||||||
| 	err := fmt.Errorf("unexpected HTTP proxy via proxy: %s", got.Bytes()) | 	err := fmt.Errorf("unexpected HTTP request via proxy: %s", got.Bytes()) | ||||||
| 	mainError.Store(err) | 	mainError.Store(err) | ||||||
| 	if tt.Err() == nil { | 	if tt.Err() == nil { | ||||||
| 		// Best effort at remembering the first request. | 		// Best effort at remembering the first request. | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user