@@ -302,6 +302,7 @@ var _ = Describe("manger.Manager", func() {
302302					LeaderElectionID :        "test-leader-election-id-2" ,
303303					HealthProbeBindAddress :  "0" ,
304304					MetricsBindAddress :      "0" ,
305+ 					PprofBindAddress :        "0" ,
305306				})
306307				Expect (err ).To (BeNil ())
307308
@@ -347,6 +348,7 @@ var _ = Describe("manger.Manager", func() {
347348					LeaderElectionID :        "test-leader-election-id-3" ,
348349					HealthProbeBindAddress :  "0" ,
349350					MetricsBindAddress :      "0" ,
351+ 					PprofBindAddress :        "0" ,
350352				})
351353				Expect (err ).To (BeNil ())
352354
@@ -381,6 +383,7 @@ var _ = Describe("manger.Manager", func() {
381383					},
382384					HealthProbeBindAddress : "0" ,
383385					MetricsBindAddress :     "0" ,
386+ 					PprofBindAddress :       "0" ,
384387				})
385388				Expect (err ).ToNot (HaveOccurred ())
386389				Expect (m1 ).ToNot (BeNil ())
@@ -401,6 +404,7 @@ var _ = Describe("manger.Manager", func() {
401404					},
402405					HealthProbeBindAddress : "0" ,
403406					MetricsBindAddress :     "0" ,
407+ 					PprofBindAddress :       "0" ,
404408				})
405409				Expect (err ).ToNot (HaveOccurred ())
406410				Expect (m2 ).ToNot (BeNil ())
@@ -1478,6 +1482,99 @@ var _ = Describe("manger.Manager", func() {
14781482		})
14791483	})
14801484
1485+ 	Context ("should start serving pprof" , func () {
1486+ 		var  listener  net.Listener 
1487+ 		var  opts  Options 
1488+ 
1489+ 		BeforeEach (func () {
1490+ 			listener  =  nil 
1491+ 			opts  =  Options {
1492+ 				newPprofListener : func (addr  string ) (net.Listener , error ) {
1493+ 					var  err  error 
1494+ 					listener , err  =  defaultPprofListener (addr )
1495+ 					return  listener , err 
1496+ 				},
1497+ 			}
1498+ 		})
1499+ 
1500+ 		AfterEach (func () {
1501+ 			if  listener  !=  nil  {
1502+ 				listener .Close ()
1503+ 			}
1504+ 		})
1505+ 
1506+ 		It ("should stop serving pprof when stop is called" , func () {
1507+ 			opts .PprofBindAddress  =  ":0" 
1508+ 			m , err  :=  New (cfg , opts )
1509+ 			Expect (err ).NotTo (HaveOccurred ())
1510+ 
1511+ 			ctx , cancel  :=  context .WithCancel (context .Background ())
1512+ 			go  func () {
1513+ 				defer  GinkgoRecover ()
1514+ 				Expect (m .Start (ctx )).NotTo (HaveOccurred ())
1515+ 			}()
1516+ 			<- m .Elected ()
1517+ 
1518+ 			// Check the pprof started 
1519+ 			endpoint  :=  fmt .Sprintf ("http://%s" , listener .Addr ().String ())
1520+ 			_ , err  =  http .Get (endpoint )
1521+ 			Expect (err ).NotTo (HaveOccurred ())
1522+ 
1523+ 			// Shutdown the server 
1524+ 			cancel ()
1525+ 
1526+ 			// Expect the pprof server to shutdown 
1527+ 			Eventually (func () error  {
1528+ 				_ , err  =  http .Get (endpoint )
1529+ 				return  err 
1530+ 			}, 10 * time .Second ).ShouldNot (Succeed ())
1531+ 		})
1532+ 
1533+ 		It ("should serve pprof endpoints" , func () {
1534+ 			opts .PprofBindAddress  =  ":0" 
1535+ 			m , err  :=  New (cfg , opts )
1536+ 			Expect (err ).NotTo (HaveOccurred ())
1537+ 
1538+ 			ctx , cancel  :=  context .WithCancel (context .Background ())
1539+ 			defer  cancel ()
1540+ 			go  func () {
1541+ 				defer  GinkgoRecover ()
1542+ 				Expect (m .Start (ctx )).NotTo (HaveOccurred ())
1543+ 			}()
1544+ 			<- m .Elected ()
1545+ 
1546+ 			pprofIndexEndpoint  :=  fmt .Sprintf ("http://%s/debug/pprof/" , listener .Addr ().String ())
1547+ 			resp , err  :=  http .Get (pprofIndexEndpoint )
1548+ 			Expect (err ).NotTo (HaveOccurred ())
1549+ 			defer  resp .Body .Close ()
1550+ 			Expect (resp .StatusCode ).To (Equal (http .StatusOK ))
1551+ 
1552+ 			pprofCmdlineEndpoint  :=  fmt .Sprintf ("http://%s/debug/pprof/cmdline" , listener .Addr ().String ())
1553+ 			resp , err  =  http .Get (pprofCmdlineEndpoint )
1554+ 			Expect (err ).NotTo (HaveOccurred ())
1555+ 			defer  resp .Body .Close ()
1556+ 			Expect (resp .StatusCode ).To (Equal (http .StatusOK ))
1557+ 
1558+ 			pprofProfileEndpoint  :=  fmt .Sprintf ("http://%s/debug/pprof/profile" , listener .Addr ().String ())
1559+ 			resp , err  =  http .Get (pprofProfileEndpoint )
1560+ 			Expect (err ).NotTo (HaveOccurred ())
1561+ 			defer  resp .Body .Close ()
1562+ 			Expect (resp .StatusCode ).To (Equal (http .StatusOK ))
1563+ 
1564+ 			pprofSymbolEndpoint  :=  fmt .Sprintf ("http://%s/debug/pprof/symbol" , listener .Addr ().String ())
1565+ 			resp , err  =  http .Get (pprofSymbolEndpoint )
1566+ 			Expect (err ).NotTo (HaveOccurred ())
1567+ 			defer  resp .Body .Close ()
1568+ 			Expect (resp .StatusCode ).To (Equal (http .StatusOK ))
1569+ 
1570+ 			pprofTraceEndpoint  :=  fmt .Sprintf ("http://%s/debug/pprof/trace" , listener .Addr ().String ())
1571+ 			resp , err  =  http .Get (pprofTraceEndpoint )
1572+ 			Expect (err ).NotTo (HaveOccurred ())
1573+ 			defer  resp .Body .Close ()
1574+ 			Expect (resp .StatusCode ).To (Equal (http .StatusOK ))
1575+ 		})
1576+ 	})
1577+ 
14811578	Describe ("Add" , func () {
14821579		It ("should immediately start the Component if the Manager has already Started another Component" ,
14831580			func () {
0 commit comments