From 93f1dfa205ca76c0eb2f0fe3100a03b5700ffbf6 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Mon, 28 Jul 2025 20:32:39 +0000 Subject: [PATCH] Add test for SR Sid Spotlight configuration and stats management Co-authored-by: nilaa567.murugaa --- .../Valimar/Stats/TEST_Stats_Spotlight_Sid.py | 266 ++++++++++++++++++ .../TEST_Stats_Spotlight_Sid.cpython-313.pyc | Bin 0 -> 12295 bytes 2 files changed, 266 insertions(+) create mode 100644 tests/Valimar/Stats/TEST_Stats_Spotlight_Sid.py create mode 100644 tests/Valimar/Stats/__pycache__/TEST_Stats_Spotlight_Sid.cpython-313.pyc diff --git a/tests/Valimar/Stats/TEST_Stats_Spotlight_Sid.py b/tests/Valimar/Stats/TEST_Stats_Spotlight_Sid.py new file mode 100644 index 0000000..cf3ae54 --- /dev/null +++ b/tests/Valimar/Stats/TEST_Stats_Spotlight_Sid.py @@ -0,0 +1,266 @@ +import time +from .Stats_Common import Stats_CommonTestCase +from .Stats_Common import ( + STUB_srteSensorConfigCliCreate, + STUB_srteSensorConfigCliDelete, +) +from utilities.commonPredicates import checkTrue +from utilities.prereq import Prereq +import utilities.SR.Predicates as SR_Preds + + +class TEST_Stats_Spotlight_Sid(Stats_CommonTestCase): + """ + SR Sid Spotlight. + """ + + def testSetup(self): + super().testSetup() + + for d in self.ALL_DEVICES: + d.stubEnable(STUB_srteSensorConfigCliCreate) + d.stubEnable(STUB_srteSensorConfigCliDelete) + + def testExecute(self): + algo0_labels = [16001, 16002, 16003] + flex_labels = [17002, 17003, 18002, 18003, 19002, 19003] + adj_labels = [32000, 32001] + + with self.testlog.step( + "Enable spotlight+collection on algo0 range", + pass_on_exit=True, + reraise_ex=True, + ): + for l in algo0_labels: + self.UUT.stubExpect(STUB_srteSensorConfigCliCreate, f"0 1") + self.UUT.sendConfig( + """segment-routing sid-stats-range "16000" "16999" stats-spotlight-state on""" + ) + self.sanityCheck(devices=[self.UUT]) + + with self.testlog.step( + "Disable spotlight on algo0 range", + pass_on_exit=True, + reraise_ex=True, + ): + for l in algo0_labels: + self.UUT.stubExpect(STUB_srteSensorConfigCliDelete, f"0 1") + self.UUT.sendConfig( + """segment-routing sid-stats-range "16000" "16999" stats-spotlight-state off""" + ) + self.sanityCheck(devices=[self.UUT]) + + with self.testlog.step( + "Re-Enable spotlight on algo0 range", + pass_on_exit=True, + reraise_ex=True, + ): + for l in algo0_labels: + self.UUT.stubExpect(STUB_srteSensorConfigCliCreate, f"0 1") + self.UUT.sendConfig( + """segment-routing sid-stats-range "16000" "16999" stats-spotlight-state on""" + ) + self.sanityCheck(devices=[self.UUT]) + + with self.testlog.step( + "Remove the algo0 range", + pass_on_exit=True, + reraise_ex=True, + ): + for l in algo0_labels: + self.UUT.stubExpect(STUB_srteSensorConfigCliDelete, f"0 1") + self.UUT.sendConfig( + """no segment-routing sid-stats-range "16000" "16999" """ + ) + self.sanityCheck(devices=[self.UUT]) + + with self.testlog.step( + "Enable spotlight+collection on flex range", + pass_on_exit=True, + reraise_ex=True, + ): + for l in flex_labels: + self.UUT.stubExpect(STUB_srteSensorConfigCliCreate, f"0 1") + # no labels alloc'ed for FA local, but stats still enabled + self.UUT.stubExpect(STUB_srteSensorConfigCliCreate, f"0 1") + self.UUT.stubExpect(STUB_srteSensorConfigCliCreate, f"0 1") + self.UUT.stubExpect(STUB_srteSensorConfigCliCreate, f"0 1") + self.UUT.sendConfig( + """segment-routing sid-stats-range "17000" "19999" stats-spotlight-state on""" + ) + self.sanityCheck(devices=[self.UUT]) + + with self.testlog.step( + "Disable spotlight on flex range", + pass_on_exit=True, + reraise_ex=True, + ): + for l in flex_labels: + self.UUT.stubExpect(STUB_srteSensorConfigCliDelete, f"0 1") + # no labels alloc'ed for FA local, but stats still enabled + self.UUT.stubExpect(STUB_srteSensorConfigCliDelete, f"0 1") + self.UUT.stubExpect(STUB_srteSensorConfigCliDelete, f"0 1") + self.UUT.stubExpect(STUB_srteSensorConfigCliDelete, f"0 1") + self.UUT.sendConfig( + """segment-routing sid-stats-range "17000" "19999" stats-spotlight-state off""" + ) + self.sanityCheck(devices=[self.UUT]) + + with self.testlog.step( + "Re-Enable spotlight on flex range", + pass_on_exit=True, + reraise_ex=True, + ): + for l in flex_labels: + self.UUT.stubExpect(STUB_srteSensorConfigCliCreate, f"0 1") + # no labels alloc'ed for FA local, but stats still enabled + self.UUT.stubExpect(STUB_srteSensorConfigCliCreate, f"0 1") + self.UUT.stubExpect(STUB_srteSensorConfigCliCreate, f"0 1") + self.UUT.stubExpect(STUB_srteSensorConfigCliCreate, f"0 1") + self.UUT.sendConfig( + """segment-routing sid-stats-range "17000" "19999" stats-spotlight-state on""" + ) + self.sanityCheck(devices=[self.UUT]) + + with self.testlog.step( + "Remove the flex range", + pass_on_exit=True, + reraise_ex=True, + ): + for l in flex_labels: + self.UUT.stubExpect(STUB_srteSensorConfigCliDelete, f"0 1") + # no labels alloc'ed for FA local, but stats still enabled + self.UUT.stubExpect(STUB_srteSensorConfigCliDelete, f"0 1") + self.UUT.stubExpect(STUB_srteSensorConfigCliDelete, f"0 1") + self.UUT.stubExpect(STUB_srteSensorConfigCliDelete, f"0 1") + self.UUT.sendConfig( + """no segment-routing sid-stats-range "17000" "19999" """ + ) + self.sanityCheck(devices=[self.UUT]) + + with self.testlog.step( + "Enable spotlight+collection on adjacency SID labels", + pass_on_exit=True, + reraise_ex=True, + ): + for l in adj_labels: + self.UUT.stubExpect(STUB_srteSensorConfigCliCreate, f"0 1") + self.UUT.sendConfig( + """segment-routing adj-sid-stats stats-collection on stats-spotlight-state on""" + ) + self.sanityCheck(devices=[self.UUT]) + + with self.testlog.step( + "Disable spotlight on adjacency SID labels", + pass_on_exit=True, + reraise_ex=True, + ): + for l in adj_labels: + self.UUT.stubExpect(STUB_srteSensorConfigCliDelete, f"0 1") + self.UUT.sendConfig( + """segment-routing adj-sid-stats stats-spotlight-state off""" + ) + self.sanityCheck(devices=[self.UUT]) + + with self.testlog.step( + "Re-Enable spotlight on adjacency SID labels", + pass_on_exit=True, + reraise_ex=True, + ): + for l in adj_labels: + self.UUT.stubExpect(STUB_srteSensorConfigCliCreate, f"0 1") + self.UUT.sendConfig( + """segment-routing adj-sid-stats stats-spotlight-state on""" + ) + self.sanityCheck(devices=[self.UUT]) + + with self.testlog.step( + "Remove adjacency SID spotlight configurations", + pass_on_exit=True, + reraise_ex=True, + ): + for l in adj_labels: + self.UUT.stubExpect(STUB_srteSensorConfigCliDelete, f"0 1") + self.UUT.sendConfig( + """no segment-routing adj-sid-stats stats-spotlight-state""" + ) + self.sanityCheck(devices=[self.UUT]) + + with self.testlog.step( + "Re-Enable spotlight on adjacency SID labels and remove adjacency SID configurations", + pass_on_exit=True, + reraise_ex=True, + ): + for l in adj_labels: + self.UUT.stubExpect(STUB_srteSensorConfigCliCreate, f"0 1") + self.UUT.sendConfig( + """segment-routing adj-sid-stats stats-spotlight-state on""" + ) + self.sanityCheck(devices=[self.UUT]) + for l in adj_labels: + self.UUT.stubExpect(STUB_srteSensorConfigCliDelete, f"0 1") + self.UUT.sendConfig("""no segment-routing adj-sid-stats""") + self.sanityCheck(devices=[self.UUT]) + + with self.testlog.step( + "Re-Enable spotlight on SIDs and remove all segment-routing configurations", + pass_on_exit=True, + reraise_ex=True, + ): + # Re-enable spotlight on algo0 labels (16000-16999 range) + for l in algo0_labels: + self.UUT.stubExpect(STUB_srteSensorConfigCliCreate, f"0 1") + self.UUT.sendConfig( + """segment-routing sid-stats-range "16000" "16999" stats-spotlight-state on""" + ) + self.sanityCheck(devices=[self.UUT]) + + # Re-enable spotlight on flex labels (17000-19999 range) + for l in flex_labels: + self.UUT.stubExpect(STUB_srteSensorConfigCliCreate, f"0 1") + # no labels alloc'ed for FA local, but stats still enabled + self.UUT.stubExpect(STUB_srteSensorConfigCliCreate, f"0 1") + self.UUT.stubExpect(STUB_srteSensorConfigCliCreate, f"0 1") + self.UUT.stubExpect(STUB_srteSensorConfigCliCreate, f"0 1") + self.UUT.sendConfig( + """segment-routing sid-stats-range "17000" "19999" stats-spotlight-state on""" + ) + self.sanityCheck(devices=[self.UUT]) + + # Re-enable spotlight on adjacency SID labels + for l in adj_labels: + self.UUT.stubExpect(STUB_srteSensorConfigCliCreate, f"0 1") + self.UUT.sendConfig( + """segment-routing adj-sid-stats stats-collection on stats-spotlight-state on""" + ) + self.sanityCheck(devices=[self.UUT]) + + # Now use "no segment-routing" to disable all spotlight configurations + # This should delete all the sensors that were created above + + # Expect deletion of algo0 labels + for l in algo0_labels: + self.UUT.stubExpect(STUB_srteSensorConfigCliDelete, f"0 1") + + # Expect deletion of flex labels + for l in flex_labels: + self.UUT.stubExpect(STUB_srteSensorConfigCliDelete, f"0 1") + # no labels alloc'ed for FA local, but stats still enabled + self.UUT.stubExpect(STUB_srteSensorConfigCliDelete, f"0 1") + self.UUT.stubExpect(STUB_srteSensorConfigCliDelete, f"0 1") + self.UUT.stubExpect(STUB_srteSensorConfigCliDelete, f"0 1") + + # Expect deletion of adjacency SID labels + for l in adj_labels: + self.UUT.stubExpect(STUB_srteSensorConfigCliDelete, f"0 1") + + # Execute the "no segment-routing" command to disable all segment-routing features + self.UUT.sendConfig("""no segment-routing""") + self.sanityCheck(devices=[self.UUT]) + + def testCleanup(self): + for d in self.ALL_DEVICES: + d.stubDisable(STUB_srteSensorConfigCliCreate) + d.stubDisable(STUB_srteSensorConfigCliDelete) + + super().testCleanup() \ No newline at end of file diff --git a/tests/Valimar/Stats/__pycache__/TEST_Stats_Spotlight_Sid.cpython-313.pyc b/tests/Valimar/Stats/__pycache__/TEST_Stats_Spotlight_Sid.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d41d92ab3cdba2659fcdf6873ede28c84ea8691c GIT binary patch literal 12295 zcmeHNU2GHC6~5!KJ(Ka+B!PsGKs@;~DRr z$qFpBqOH`DC$>_z?L!~7Pc855`>I-1eW+AWQ;24FyQqCaDi8>iRiAq9j1&K45<7Ol zTd8B~{>+?v&$-_@_s-mV&QdVQA-MMc{U5D}##zkTWon{foHL-!cmVSPYD3*fWZIF) zUho{G9Zooyq9P3sNG1A!f;2)|+e9;N8q%1aPV3r~Y?xzlLymZ?PH`$WDjC?6MOia+ zJf>^YN@`41#;_bW<+Y!mlvUZ3q34FgjGVYKg=a~{{|zi-`Tc|=h?9D9m8BC981e8LzsA$A* z`Hb0&jI9O}R3^&iY{m+VoINX@JoT+JW2Z!mGtAjbr?mJbRmQ~5upg3JwBT`cQNC60}7{njxawnz`6U=E)$;lW$TQ z1-S=um@T4r(4*0y6VkNgnj|etF3~6Y;l~Wq9zZlkf!=yRZ(wh3T3uh4B6~1r#{xR{ znxmsN`U#YX0adXfuVH8vTutHL*B~Ww!<0SmVNJ+O0Mx6yK&}`BYQ`Y6%&JBV__|>b ztQmuqIb9n9lG|j0Uf@|_HH_?-#l!oS%tk?GIs2SL3`aW=%^V3*LAQ8 z40hHHgIzUauvvD{SvL&AHDmBKv4dDOYuRS$PpF&zx{CDoKYZR1`~Thy4qYnP8@jzm zYWyawYVK^-ysz;)psF*z_2+#xmbiY8m7hMk_EYyS+j_38-J83%rcf8!i+1M@IFoQ* zKkX4v7*2}?^ez|u-ElgMrm1ylPL`!+;E+;&NRl5x67egSN1=R$B$MwzB9i3j zI3#b91bq(@3X*J}<8cv;W&hKjgs!S`!c=rkfPY*~=|cjJYbkjOd~AG%IAC;5lCLVJ z#es(`t{5`Zvh{T2Dq2b~lw`j_+;#nS7ee>GLqkJD-6S6#9_|*L zXDiHYS{e9)|BXq?A1Ddg$OC>slX8D4B&FgMTIH9?qc);I4yiHtY&%0jmlSt%wyM+O-Cv1>9N+ z04=y(8J@**WcQcBGoHL0Psm#0njoGzDX8&FvT9_8CYL!A2-~PwWJfMU{DdR?;v)L^yR-PRv61L+`qt@EjGmtC7(Q&iw1h+P?P&Z?(RCBe2lg@ypnU z7jJO)gH1Ot%w4z_?7S1~TmV=2j$I4eI~Exf3O_~O5Vypk*6t6fg~n~aV1LTqYwWqx z*fZZd`bpw$dNa;<8ty|r>ZQ_WZpyK(JWN3UJB3iFzs7fyWA zGta-fP^j+8Z5S+Ooxs_WRrx$M`*bE&g^StRA5M&^HoJ`{_^jLe@tAaR9PD`cFfn zZ>5jXe{LRqOAFC|IRKeJ|FspeH|V=ZM#8$6UN{O_D{UQvY&ZS+3CNDpU!u|D8J_-! zFdoQs(*HWZrD^7&pG&te58Jr(>&(MGEmnjO?TopzO$C5Cx(yJg;)+Ipm{7P_b z!Lc6Y7RGp<1c%yJo^m-B!b_)_Txo?76vf^X-la2X8u+yZrDI z5)b=~MGYYmM%(c>b{8gFid!hcS*#>!@w6;S7AHw*JvpnAGA~K*&&JiXD^+Zj8FQ^q7AA=XAGBwzg)J@I&a>~q%V8-5zPLi_f;c#rYm;>wyd>kH-aT|nUk)|l>GZgp&4ZQHs il;=5%sC{3co-a|~ZPfS7|9zV3ydB>E9Fc