1 /* 2 * Copyright (c) 2011-2015, Intel Corporation 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without modification, 6 * are permitted provided that the following conditions are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright notice, this 9 * list of conditions and the following disclaimer. 10 * 11 * 2. Redistributions in binary form must reproduce the above copyright notice, 12 * this list of conditions and the following disclaimer in the documentation and/or 13 * other materials provided with the distribution. 14 * 15 * 3. Neither the name of the copyright holder nor the names of its contributors 16 * may be used to endorse or promote products derived from this software without 17 * specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 22 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR 23 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 26 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 #include <fstream> 31 #include <assert.h> 32 #include "TESTSubsystem.h" 33 #include "TESTSubsystemBinary.h" 34 #include "TESTSubsystemString.h" 35 #include "TESTMappingKeys.h" 36 #include "SubsystemObjectFactory.h" 37 #include <stdlib.h> 38 #include <stdio.h> 39 40 #define base CSubsystem 41 42 // Directory for isAlive and NeedResync files 43 const char *gacFwNamePropName = getenv("PFW_RESULT"); 44 45 // Implementation 46 CTESTSubsystem::CTESTSubsystem(const std::string &strName, core::log::Logger &logger) 47 : base(strName, logger) 48 { 49 // Provide mapping keys to upper layer 50 addContextMappingKey("Directory"); 51 addContextMappingKey("Log"); 52 53 // Provide creators to upper layer 54 addSubsystemObjectFactory( 55 new TSubsystemObjectFactory<CTESTSubsystemBinary>("Binary", 1 << ETESTDirectory)); 56 addSubsystemObjectFactory( 57 new TSubsystemObjectFactory<CTESTSubsystemString>("String", 1 << ETESTDirectory)); 58 } 59 60 // Susbsystem sanity health 61 bool CTESTSubsystem::isAlive() const 62 { 63 assert(gacFwNamePropName != nullptr); 64 return read(std::string(gacFwNamePropName) + "/isAlive") == "true"; 65 } 66 67 // Resynchronization after subsystem restart needed 68 bool CTESTSubsystem::needResync(bool bClear) 69 { 70 assert(gacFwNamePropName != nullptr); 71 std::string strNeedResyncFile = std::string(gacFwNamePropName) + "/needResync"; 72 bool bNeedResync; 73 74 bNeedResync = read(strNeedResyncFile) == "true"; 75 76 if (!bNeedResync) { 77 78 // subsystem does not need resync 79 return false; 80 } else { 81 // subsystem needs resync 82 // If indicated, clear need resync state 83 if (bClear) { 84 85 write(strNeedResyncFile, "false"); 86 } 87 88 return true; 89 } 90 } 91 92 // Read boolean from file 93 std::string CTESTSubsystem::read(const std::string &strFileName) 94 { 95 std::ifstream file; 96 std::string strContent; 97 98 file.open(strFileName.c_str()); 99 100 file >> strContent; 101 102 return strContent; 103 } 104 105 // Write boolean to file 106 void CTESTSubsystem::write(const std::string &strFileName, const std::string &strContent) 107 { 108 std::ofstream file; 109 110 file.open(strFileName.c_str()); 111 112 assert(file.is_open()); 113 114 file << strContent; 115 } 116