private static bool ValidateEWR(bool NewData) { bool success = true; for (uint i = 1; i < 10; i++) { ewrs[i] = ExtendedWeakReference.Recover(typeof(TestObj), i); if (ewrs[i] == null) { success = false; Log.Exception("Unable to recover object #" + i + " after reboot " + runTracker.RebootCount); ewrs[i] = ExtendedWeakReference.RecoverOrCreate(typeof(TestObj), i, ExtendedWeakReference.c_SurviveBoot | ExtendedWeakReference.c_SurvivePowerdown); } TestObj obj = (TestObj)ewrs[i].Target; if (obj == null) { success = false; Log.Exception("Recovered object #" + i + " null after reboot " + runTracker.RebootCount); } if (runTracker.objHashes[i] != obj.GetHashCode()) { success = false; Log.Exception("Recovered object #" + i + " hash value does not match stored hash value"); } Log.Comment("Verified object #" + i); if (NewData) { Log.Comment("Creating new object and setting back to ewr"); obj = new TestObj(); ewrs[i].Target = obj; runTracker.objHashes[i] = obj.GetHashCode(); } else { Log.Comment("Pushing object back into list"); ewrs[i].PushBackIntoRecoverList(); } } return(success); }
private static bool ValidateEWR(bool NewData) { bool success = true; for (uint i = 1; i < 10; i++) { ewrs[i] = ExtendedWeakReference.Recover(typeof(TestObj), i); if (ewrs[i] == null) { success = false; Log.Exception("Unable to recover object #" + i + " after reboot " + runTracker.RebootCount); ewrs[i] = ExtendedWeakReference.RecoverOrCreate(typeof(TestObj), i, ExtendedWeakReference.c_SurviveBoot | ExtendedWeakReference.c_SurvivePowerdown); } TestObj obj = (TestObj)ewrs[i].Target; if (obj == null) { success = false; Log.Exception("Recovered object #" + i + " null after reboot " + runTracker.RebootCount); } if (runTracker.objHashes[i] != obj.GetHashCode()) { success = false; Log.Exception("Recovered object #" + i + " hash value does not match stored hash value"); } Log.Comment("Verified object #" + i); if (NewData) { Log.Comment("Creating new object and setting back to ewr"); obj = new TestObj(); ewrs[i].Target = obj; runTracker.objHashes[i] = obj.GetHashCode(); } else { Log.Comment("Pushing object back into list"); ewrs[i].PushBackIntoRecoverList(); } } return success; }
public static void Main() { // This test suite does not use the Test Runner infrastructure as it requires a // reboot of the physical device to verify the references have been saved. It relies // on the test harness to time it out if it fails to complete because of issues with // EWR persistence. // Skip test on Emulator if (Microsoft.SPOT.Hardware.SystemInfo.SystemID.SKU == 3) { StartTestLog("Emulator, skipping..."); EndTestLog(0, 0, 1); } else { ewrs[0] = ExtendedWeakReference.Recover(typeof(TestRunTracker), 0); if (ewrs[0] == null) { ewrs[0] = ExtendedWeakReference.RecoverOrCreate( typeof(TestRunTracker), 0, ExtendedWeakReference.c_SurviveBoot | ExtendedWeakReference.c_SurvivePowerdown); runTracker = new TestRunTracker() { RebootCount = -1, TestState = TestRunTracker.State.Initialize }; } else { runTracker = (TestRunTracker)ewrs[0].Target; } Log.Comment("State: " + runTracker.TestState + ", Reboot Count: " + runTracker.RebootCount); switch (runTracker.TestState) { // Initial state case TestRunTracker.State.Initialize: if (runTracker.RebootCount == -1) StartTestLog("No EWR found, initializing for first run..."); else StartTestLog("Previous EWR found. Re-initializing..."); runTracker.TestState = TestRunTracker.State.HardReboot; runTracker.RebootCount = 0; runTracker.TestState = TestRunTracker.State.HardReboot; for (uint i = 1; i < 10; i++) { ewrs[i] = ExtendedWeakReference.RecoverOrCreate(typeof(TestObj), i, ExtendedWeakReference.c_SurvivePowerdown | ExtendedWeakReference.c_SurviveBoot); TestObj obj = new TestObj(); ewrs[i].Target = obj; runTracker.objHashes[i] = obj.GetHashCode(); } break; // HardReboot cases - Reboots 1 - 3 case TestRunTracker.State.HardReboot: Debug.Print("<TestMethod name=\"HardReboot" + runTracker.RebootCount + "\">"); // Validate objects if (ValidateEWR(true)) { Debug.Print(" <TestMethodResult Result=\"Pass\">"); runTracker.PassCount++; } else { Debug.Print(" <TestMethodResult Result=\"Fail\">"); runTracker.FailCount++; } Debug.Print(" <Text><![CDATA[TEST: HardReboot" + runTracker.RebootCount + "]]></Text>" + TimeStamp()); Debug.Print(" </TestMethodResult>"); Debug.Print("</TestMethod>"); // End test if (runTracker.RebootCount >= 3) runTracker.TestState = TestRunTracker.State.SoftReboot; break; // SoftReboot cases - Reboots 4 - 6 case TestRunTracker.State.SoftReboot: Debug.Print("<TestMethod name=\"SoftReboot" + runTracker.RebootCount + "\">"); // Validate objects if (ValidateEWR(true)) { Debug.Print(" <TestMethodResult Result=\"Pass\">"); runTracker.PassCount++; } else { Debug.Print(" <TestMethodResult Result=\"Fail\">"); runTracker.FailCount++; } Debug.Print(" <Text><![CDATA[TEST: SoftReboot" + runTracker.RebootCount + "]]></Text>" + TimeStamp()); Debug.Print(" </TestMethodResult>"); Debug.Print("</TestMethod>"); // End test if (runTracker.RebootCount >= 6) runTracker.TestState = TestRunTracker.State.Restore; break; // Restore cases - Reboots 7 - 8 case TestRunTracker.State.Restore: Debug.Print("<TestMethod name=\"Restore" + runTracker.RebootCount + "\">"); if (runTracker.RebootCount == 7) Log.Comment("Restore and Pushback with Soft Reboot"); else Log.Comment("Restore and Pushback with Hard Reboot"); // Validate objects if (ValidateEWR(false)) { Debug.Print(" <TestMethodResult Result=\"Pass\">"); runTracker.PassCount++; } else { Debug.Print(" <TestMethodResult Result=\"Fail\">"); runTracker.FailCount++; } Debug.Print(" <Text><![CDATA[TEST: SoftReboot" + runTracker.RebootCount + "]]></Text>" + TimeStamp()); Debug.Print(" </TestMethodResult>"); Debug.Print("</TestMethod>"); if (runTracker.RebootCount > 8) { runTracker.TestState = TestRunTracker.State.Complete; } break; // Tests complete case TestRunTracker.State.Complete: runTracker.TestState = TestRunTracker.State.Initialize; // Close logs EndTestLog(runTracker.PassCount, runTracker.FailCount, 0); break; } runTracker.RebootCount++; ewrs[0].Target = runTracker; // Need to sleep to make sure debug buffer has chance to flush before rebooting // This should not be needed for EWR any longer System.Threading.Thread.Sleep(15000); switch (runTracker.TestState) { case TestRunTracker.State.HardReboot: PowerState.RebootDevice(false); break; case TestRunTracker.State.SoftReboot: PowerState.RebootDevice(true); break; case TestRunTracker.State.Restore: if (runTracker.RebootCount == 8) PowerState.RebootDevice(true); else PowerState.RebootDevice(false); break; } // fall through to end test suite } }
public static void Main() { // This test suite does not use the Test Runner infrastructure as it requires a // reboot of the physical device to verify the references have been saved. It relies // on the test harness to time it out if it fails to complete because of issues with // EWR persistence. // Skip test on Emulator if (Microsoft.SPOT.Hardware.SystemInfo.SystemID.SKU == 3) { StartTestLog("Emulator, skipping..."); EndTestLog(0, 0, 1); } else { ewrs[0] = ExtendedWeakReference.Recover(typeof(TestRunTracker), 0); if (ewrs[0] == null) { ewrs[0] = ExtendedWeakReference.RecoverOrCreate( typeof(TestRunTracker), 0, ExtendedWeakReference.c_SurviveBoot | ExtendedWeakReference.c_SurvivePowerdown); runTracker = new TestRunTracker() { RebootCount = -1, TestState = TestRunTracker.State.Initialize }; } else { runTracker = (TestRunTracker)ewrs[0].Target; } Log.Comment("State: " + runTracker.TestState + ", Reboot Count: " + runTracker.RebootCount); switch (runTracker.TestState) { // Initial state case TestRunTracker.State.Initialize: if (runTracker.RebootCount == -1) { StartTestLog("No EWR found, initializing for first run..."); } else { StartTestLog("Previous EWR found. Re-initializing..."); } runTracker.TestState = TestRunTracker.State.HardReboot; runTracker.RebootCount = 0; runTracker.TestState = TestRunTracker.State.HardReboot; for (uint i = 1; i < 10; i++) { ewrs[i] = ExtendedWeakReference.RecoverOrCreate(typeof(TestObj), i, ExtendedWeakReference.c_SurvivePowerdown | ExtendedWeakReference.c_SurviveBoot); TestObj obj = new TestObj(); ewrs[i].Target = obj; runTracker.objHashes[i] = obj.GetHashCode(); } break; // HardReboot cases - Reboots 1 - 3 case TestRunTracker.State.HardReboot: Debug.Print("<TestMethod name=\"HardReboot" + runTracker.RebootCount + "\">"); // Validate objects if (ValidateEWR(true)) { Debug.Print(" <TestMethodResult Result=\"Pass\">"); runTracker.PassCount++; } else { Debug.Print(" <TestMethodResult Result=\"Fail\">"); runTracker.FailCount++; } Debug.Print(" <Text><![CDATA[TEST: HardReboot" + runTracker.RebootCount + "]]></Text>" + TimeStamp()); Debug.Print(" </TestMethodResult>"); Debug.Print("</TestMethod>"); // End test if (runTracker.RebootCount >= 3) { runTracker.TestState = TestRunTracker.State.SoftReboot; } break; // SoftReboot cases - Reboots 4 - 6 case TestRunTracker.State.SoftReboot: Debug.Print("<TestMethod name=\"SoftReboot" + runTracker.RebootCount + "\">"); // Validate objects if (ValidateEWR(true)) { Debug.Print(" <TestMethodResult Result=\"Pass\">"); runTracker.PassCount++; } else { Debug.Print(" <TestMethodResult Result=\"Fail\">"); runTracker.FailCount++; } Debug.Print(" <Text><![CDATA[TEST: SoftReboot" + runTracker.RebootCount + "]]></Text>" + TimeStamp()); Debug.Print(" </TestMethodResult>"); Debug.Print("</TestMethod>"); // End test if (runTracker.RebootCount >= 6) { runTracker.TestState = TestRunTracker.State.Restore; } break; // Restore cases - Reboots 7 - 8 case TestRunTracker.State.Restore: Debug.Print("<TestMethod name=\"Restore" + runTracker.RebootCount + "\">"); if (runTracker.RebootCount == 7) { Log.Comment("Restore and Pushback with Soft Reboot"); } else { Log.Comment("Restore and Pushback with Hard Reboot"); } // Validate objects if (ValidateEWR(false)) { Debug.Print(" <TestMethodResult Result=\"Pass\">"); runTracker.PassCount++; } else { Debug.Print(" <TestMethodResult Result=\"Fail\">"); runTracker.FailCount++; } Debug.Print(" <Text><![CDATA[TEST: SoftReboot" + runTracker.RebootCount + "]]></Text>" + TimeStamp()); Debug.Print(" </TestMethodResult>"); Debug.Print("</TestMethod>"); if (runTracker.RebootCount > 8) { runTracker.TestState = TestRunTracker.State.Complete; } break; // Tests complete case TestRunTracker.State.Complete: runTracker.TestState = TestRunTracker.State.Initialize; // Close logs EndTestLog(runTracker.PassCount, runTracker.FailCount, 0); break; } runTracker.RebootCount++; ewrs[0].Target = runTracker; // Need to sleep to make sure debug buffer has chance to flush before rebooting // This should not be needed for EWR any longer System.Threading.Thread.Sleep(15000); switch (runTracker.TestState) { case TestRunTracker.State.HardReboot: PowerState.RebootDevice(false); break; case TestRunTracker.State.SoftReboot: PowerState.RebootDevice(true); break; case TestRunTracker.State.Restore: if (runTracker.RebootCount == 8) { PowerState.RebootDevice(true); } else { PowerState.RebootDevice(false); } break; } // fall through to end test suite } }