UE measurements fixes and tests for reportOnLeave and haveMeasResultNeighCells

This commit is contained in:
Budiarto Herman
2013-07-09 21:35:43 +03:00
parent 03b293375a
commit a604e2d91f
2 changed files with 44 additions and 34 deletions

View File

@@ -2154,19 +2154,18 @@ LteUeRrc::VarMeasReportListErase (uint8_t measId, ConcernedCells_t leavingCells,
measReportIt->second.cellsTriggeredList.erase (*it);
}
if (reportOnLeave)
{
// runs immediately without UE_MEASUREMENTS_DELAY
SendMeasurementReport (measId);
}
if (measReportIt->second.cellsTriggeredList.empty ())
{
measReportIt->second.periodicReportTimer.Cancel ();
m_varMeasReportList.erase (measReportIt);
}
if (reportOnLeave)
{
// TODO: this might fail because the VarMeasReportList entry might have been deleted already
// TODO: this might produce unexpectedly repeating measurement report
SendMeasurementReport (measId);
}
std::map<uint8_t, std::list<PendingTrigger_t> >::iterator
leavingTriggerIt = m_leavingTriggerQueue.find (measId);
NS_ASSERT (leavingTriggerIt != m_leavingTriggerQueue.end ());
@@ -2248,8 +2247,6 @@ LteUeRrc::SendMeasurementReport (uint8_t measId)
{
if (!(measReportIt->second.cellsTriggeredList.empty ()))
{
measResults.haveMeasResultNeighCells = true;
std::multimap<double, uint16_t> sortedNeighCells;
for (std::set<uint16_t>::iterator cellsTriggeredIt = measReportIt->second.cellsTriggeredList.begin ();
cellsTriggeredIt != measReportIt->second.cellsTriggeredList.end ();
@@ -2298,6 +2295,7 @@ LteUeRrc::SendMeasurementReport (uint8_t measId)
<< " RSRQ " << (uint32_t) measResultEutra.rsrqResult
<< " (" << neighborMeasIt->second.rsrq << " dB)");
measResults.measResultListEutra.push_back (measResultEutra);
measResults.haveMeasResultNeighCells = true;
}
}
else

View File

@@ -740,8 +740,8 @@ LteUeMeasurementsPiecewiseTestCase1::RecvMeasurementReportCallback (
<< " (" << rsrpDbm << " dBm)"
<< " rsrq=" << (uint16_t) measResults.rsrqResult
<< " (" << rsrqDb << " dB)");
NS_TEST_ASSERT_MSG_EQ (measResults.haveMeasResultNeighCells, true,
"Report does not have neighboring cells information");
NS_TEST_ASSERT_MSG_EQ (measResults.haveMeasResultNeighCells, false,
"Report should not have neighboring cells information");
NS_TEST_ASSERT_MSG_EQ (measResults.measResultListEutra.size (), 0,
"Unexpected report size");
@@ -950,20 +950,22 @@ LteUeMeasurementsPiecewiseTestSuite2::LteUeMeasurementsPiecewiseTestSuite2 ()
config, expectedTime, expectedRsrp),
TestCase::QUICK);
// With hysteresis
// With hysteresis and reportOnLeave
config.hysteresis = 6;
config.reportOnLeave = true;
config.timeToTrigger = 0;
expectedTime.clear ();
expectedTime << 800 << 1600 << 1840 << 2080;
expectedTime << 800 << 1000 << 1600 << 1840 << 2080 << 2200;
expectedRsrp.clear ();
expectedRsrp << 52 << 52 << 56 << 59;
expectedRsrp << 52 << 72 << 52 << 56 << 59 << 72;
AddTestCase (new LteUeMeasurementsPiecewiseTestCase2 ("Piecewise test case 2 - Event A3 with hysteresis",
config, expectedTime, expectedRsrp),
TestCase::EXTENSIVE);
TestCase::QUICK);
// With negative offset
config.a3Offset = -7;
config.hysteresis = 0;
config.reportOnLeave = false;
expectedTime.clear ();
expectedTime << 400 << 800 << 1200 << 1440 << 1680 << 1920 << 2160;
expectedRsrp.clear ();
@@ -1327,12 +1329,17 @@ LteUeMeasurementsPiecewiseTestCase2::RecvMeasurementReportCallback (
<< " (" << rsrpDbm << " dBm)"
<< " rsrq=" << (uint16_t) measResults.rsrqResult
<< " (" << rsrqDb << " dB)");
NS_TEST_ASSERT_MSG_EQ (measResults.haveMeasResultNeighCells, true,
"Report does not have neighboring cells information");
// verifying reported best cells
if (measResults.measResultListEutra.size () == 1)
if (measResults.measResultListEutra.size () == 0)
{
NS_TEST_ASSERT_MSG_EQ (measResults.haveMeasResultNeighCells, false,
"Unexpected report content");
}
else
{
NS_TEST_ASSERT_MSG_EQ (measResults.haveMeasResultNeighCells, true,
"Unexpected report content");
std::list<LteRrcSap::MeasResultEutra>::iterator it = measResults.measResultListEutra.begin ();
NS_ASSERT (it != measResults.measResultListEutra.end ());
NS_ASSERT (it->physCellId == 2);
@@ -1477,7 +1484,7 @@ LteUeMeasurementsHandoverTestSuite::LteUeMeasurementsHandoverTestSuite ()
expectedTime << 200 << 440 << 680 << 920 << 1200 << 1440 << 1680 << 1920;
expectedRsrp.clear ();
expectedRsrp << 55 << 55 << 55 << 55 << 53 << 53 << 53 << 53;
AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - A1 to A2",
AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - Event A1 to Event A2",
sourceConfig, targetConfig,
expectedTime, expectedRsrp),
TestCase::EXTENSIVE);
@@ -1487,7 +1494,7 @@ LteUeMeasurementsHandoverTestSuite::LteUeMeasurementsHandoverTestSuite ()
targetConfig.eventId = LteRrcSap::ReportConfigEutra::EVENT_A1;
expectedTime.clear ();
expectedRsrp.clear ();
AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - A2 to A1",
AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - Event A2 to Event A1",
sourceConfig, targetConfig,
expectedTime, expectedRsrp),
TestCase::TAKES_FOREVER);
@@ -1499,7 +1506,7 @@ LteUeMeasurementsHandoverTestSuite::LteUeMeasurementsHandoverTestSuite ()
expectedTime << 1200 << 1440 << 1680 << 1920;
expectedRsrp.clear ();
expectedRsrp << 53 << 53 << 53 << 53;
AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - A3 to A4",
AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - Event A3 to Event A4",
sourceConfig, targetConfig,
expectedTime, expectedRsrp),
TestCase::TAKES_FOREVER);
@@ -1511,7 +1518,7 @@ LteUeMeasurementsHandoverTestSuite::LteUeMeasurementsHandoverTestSuite ()
expectedTime << 1200 << 1440 << 1680 << 1920;
expectedRsrp.clear ();
expectedRsrp << 53 << 53 << 53 << 53;
AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - A4 to A3",
AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - Event A4 to Event A3",
sourceConfig, targetConfig,
expectedTime, expectedRsrp),
TestCase::QUICK);
@@ -1523,7 +1530,7 @@ LteUeMeasurementsHandoverTestSuite::LteUeMeasurementsHandoverTestSuite ()
expectedTime << 1200 << 1440 << 1680 << 1920;
expectedRsrp.clear ();
expectedRsrp << 53 << 53 << 53 << 53;
AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - A2 to A3",
AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - Event A2 to Event A3",
sourceConfig, targetConfig,
expectedTime, expectedRsrp),
TestCase::EXTENSIVE);
@@ -1535,7 +1542,7 @@ LteUeMeasurementsHandoverTestSuite::LteUeMeasurementsHandoverTestSuite ()
expectedTime << 1200 << 1440 << 1680 << 1920;
expectedRsrp.clear ();
expectedRsrp << 53 << 53 << 53 << 53;
AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - A3 to A2",
AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - Event A3 to Event A2",
sourceConfig, targetConfig,
expectedTime, expectedRsrp),
TestCase::TAKES_FOREVER);
@@ -1547,7 +1554,7 @@ LteUeMeasurementsHandoverTestSuite::LteUeMeasurementsHandoverTestSuite ()
expectedTime << 1200 << 1440 << 1680 << 1920;
expectedRsrp.clear ();
expectedRsrp << 53 << 53 << 53 << 53;
AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - A4 to A5",
AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - Event A4 to Event A5",
sourceConfig, targetConfig,
expectedTime, expectedRsrp),
TestCase::TAKES_FOREVER);
@@ -1559,7 +1566,7 @@ LteUeMeasurementsHandoverTestSuite::LteUeMeasurementsHandoverTestSuite ()
expectedTime << 1200 << 1440 << 1680 << 1920;
expectedRsrp.clear ();
expectedRsrp << 53 << 53 << 53 << 53;
AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - A5 to A4",
AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - Event A5 to Event A4",
sourceConfig, targetConfig,
expectedTime, expectedRsrp),
TestCase::EXTENSIVE);
@@ -1576,7 +1583,7 @@ LteUeMeasurementsHandoverTestSuite::LteUeMeasurementsHandoverTestSuite ()
expectedTime << 200 << 440 << 680 << 920;
expectedRsrp.clear ();
expectedRsrp << 55 << 55 << 55 << 55;
AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - A1 threshold difference",
AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - Event A1 threshold difference",
sourceConfig, targetConfig,
expectedTime, expectedRsrp),
TestCase::EXTENSIVE);
@@ -1588,7 +1595,7 @@ LteUeMeasurementsHandoverTestSuite::LteUeMeasurementsHandoverTestSuite ()
expectedTime << 1200 << 1440 << 1680 << 1920;
expectedRsrp.clear ();
expectedRsrp << 53 << 53 << 53 << 53;
AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - A2 threshold difference",
AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - Event A2 threshold difference",
sourceConfig, targetConfig,
expectedTime, expectedRsrp),
TestCase::QUICK);
@@ -1602,7 +1609,7 @@ LteUeMeasurementsHandoverTestSuite::LteUeMeasurementsHandoverTestSuite ()
expectedTime << 200 << 440 << 680 << 920;
expectedRsrp.clear ();
expectedRsrp << 55 << 55 << 55 << 55;
AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - A3 offset difference",
AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - Event A3 offset difference",
sourceConfig, targetConfig,
expectedTime, expectedRsrp),
TestCase::QUICK);
@@ -1614,7 +1621,7 @@ LteUeMeasurementsHandoverTestSuite::LteUeMeasurementsHandoverTestSuite ()
expectedTime << 200 << 440 << 680 << 920;
expectedRsrp.clear ();
expectedRsrp << 55 << 55 << 55 << 55;
AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - A4 threshold difference",
AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - Event A4 threshold difference",
sourceConfig, targetConfig,
expectedTime, expectedRsrp),
TestCase::EXTENSIVE);
@@ -1626,7 +1633,7 @@ LteUeMeasurementsHandoverTestSuite::LteUeMeasurementsHandoverTestSuite ()
targetConfig.threshold2.range = 56;
expectedTime.clear ();
expectedRsrp.clear ();
AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - A5 threshold difference",
AddTestCase (new LteUeMeasurementsHandoverTestCase ("Handover test case - Event A5 threshold difference",
sourceConfig, targetConfig,
expectedTime, expectedRsrp),
TestCase::EXTENSIVE);
@@ -1827,12 +1834,17 @@ LteUeMeasurementsHandoverTestCase::RecvMeasurementReportCallback (
<< " (" << rsrpDbm << " dBm)"
<< " rsrq=" << (uint16_t) measResults.rsrqResult
<< " (" << rsrqDb << " dB)");
NS_TEST_ASSERT_MSG_EQ (measResults.haveMeasResultNeighCells, true,
"Report does not have neighboring cells information");
// verifying reported best cells
if (measResults.measResultListEutra.size () == 1)
if (measResults.measResultListEutra.size () == 0)
{
NS_TEST_ASSERT_MSG_EQ (measResults.haveMeasResultNeighCells, false,
"Unexpected report content");
}
else
{
NS_TEST_ASSERT_MSG_EQ (measResults.haveMeasResultNeighCells, true,
"Unexpected report content");
std::list<LteRrcSap::MeasResultEutra>::iterator it = measResults.measResultListEutra.begin ();
NS_ASSERT (it != measResults.measResultListEutra.end ());
NS_ASSERT (it->physCellId != cellId);