@@ -751,6 +751,7 @@ class TxtDataTester
751751 : mBorderAgent (aBorderAgent)
752752 , mIsRunning (false )
753753 , mUdpPort (0 )
754+ , mCallbackInvoked (false )
754755 {
755756 }
756757
@@ -761,6 +762,7 @@ class TxtDataTester
761762 mIsRunning = mBorderAgent .IsRunning ();
762763 mUdpPort = mBorderAgent .GetUdpPort ();
763764 SuccessOrQuit (mBorderAgent .PrepareServiceTxtData (mTxtData ));
765+ mCallbackInvoked = true ;
764766 }
765767
766768 bool FindTxtEntry (const char *aKey, TxtEntry &aTxtEntry)
@@ -785,6 +787,7 @@ class TxtDataTester
785787 BorderAgent::ServiceTxtData mTxtData ;
786788 bool mIsRunning ;
787789 uint16_t mUdpPort ;
790+ bool mCallbackInvoked ;
788791};
789792
790793template <typename ObjectType> bool CheckObjectSameAsTxtEntryData (const TxtEntry &aTxtEntry, const ObjectType &aObject)
@@ -802,15 +805,19 @@ template <> bool CheckObjectSameAsTxtEntryData<NameData>(const TxtEntry &aTxtEnt
802805
803806void TestBorderAgentTxtDataCallback (void )
804807{
805- Core nexus;
806- Node &node0 = nexus.CreateNode ();
808+ Core nexus;
809+ Node &node0 = nexus.CreateNode ();
810+ TxtDataTester txtDataTester (node0.Get <BorderAgent>());
811+ TxtEntry txtEntry;
812+ #if OPENTHREAD_CONFIG_BORDER_AGENT_ID_ENABLE
813+ BorderAgent::Id id;
814+ BorderAgent::Id newId;
815+ #endif
807816
808817 Log (" ------------------------------------------------------------------------------------------------------" );
809818 Log (" TestBorderAgentTxtDataCallback" );
810819
811820 nexus.AdvanceTime (0 );
812- TxtDataTester txtDataTester (node0.Get <BorderAgent>());
813- TxtEntry txtEntry;
814821
815822 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
816823 // 1. Set MeshCoP service change callback. Will get initial values.
@@ -819,9 +826,9 @@ void TestBorderAgentTxtDataCallback(void)
819826 nexus.AdvanceTime (1 );
820827
821828 // 1.1 Check the initial TXT entries
829+ VerifyOrQuit (txtDataTester.mCallbackInvoked );
822830#if OPENTHREAD_CONFIG_BORDER_AGENT_ID_ENABLE
823831 VerifyOrQuit (txtDataTester.FindTxtEntry (" id" , txtEntry));
824- BorderAgent::Id id;
825832 VerifyOrQuit (node0.Get <BorderAgent>().GetId (id) == kErrorNone );
826833 VerifyOrQuit (CheckObjectSameAsTxtEntryData (txtEntry, id));
827834#endif
@@ -844,11 +851,13 @@ void TestBorderAgentTxtDataCallback(void)
844851
845852 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
846853 // 2. Join Thread network and check updated values and states.
854+ txtDataTester.mCallbackInvoked = false ;
847855 Log (" Join Thread network and check updated Txt data and states" );
848856 node0.Form ();
849857 nexus.AdvanceTime (50 * Time::kOneSecondInMsec );
850858
851859 // 2.1 Check the initial TXT entries
860+ VerifyOrQuit (txtDataTester.mCallbackInvoked );
852861#if OPENTHREAD_CONFIG_BORDER_AGENT_ID_ENABLE
853862 VerifyOrQuit (txtDataTester.FindTxtEntry (" id" , txtEntry));
854863 VerifyOrQuit (node0.Get <BorderAgent>().GetId (id) == kErrorNone );
@@ -872,6 +881,33 @@ void TestBorderAgentTxtDataCallback(void)
872881 // 2.2 Check the Border Agent state
873882 VerifyOrQuit (txtDataTester.mIsRunning == true );
874883 VerifyOrQuit (txtDataTester.mUdpPort != 0 );
884+
885+ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
886+
887+ #if OPENTHREAD_CONFIG_BORDER_AGENT_ID_ENABLE
888+ Log (" Change the Border Agent ID and validate that TXT data changed and callback is invoked" );
889+
890+ newId.GenerateRandom ();
891+ VerifyOrQuit (newId != id);
892+
893+ txtDataTester.mCallbackInvoked = false ;
894+ SuccessOrQuit (node0.Get <BorderAgent>().SetId (newId));
895+
896+ nexus.AdvanceTime (1 );
897+
898+ VerifyOrQuit (txtDataTester.mCallbackInvoked );
899+ VerifyOrQuit (txtDataTester.FindTxtEntry (" id" , txtEntry));
900+ VerifyOrQuit (CheckObjectSameAsTxtEntryData (txtEntry, newId));
901+
902+ // Validate that setting the ID to the same value as before is
903+ // correctly detected and does not trigger the callback.
904+
905+ txtDataTester.mCallbackInvoked = false ;
906+ SuccessOrQuit (node0.Get <BorderAgent>().SetId (newId));
907+ nexus.AdvanceTime (1 );
908+ VerifyOrQuit (!txtDataTester.mCallbackInvoked );
909+
910+ #endif // OPENTHREAD_CONFIG_BORDER_AGENT_ID_ENABLE
875911}
876912
877913} // namespace Nexus
0 commit comments