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) : base(strName) 47 { 48 // Provide mapping keys to upper layer 49 addContextMappingKey("Directory"); 50 addContextMappingKey("Log"); 51 52 // Provide creators to upper layer 53 addSubsystemObjectFactory(new TSubsystemObjectFactory<CTESTSubsystemBinary>("Binary", 1 << ETESTDirectory)); 54 addSubsystemObjectFactory(new TSubsystemObjectFactory<CTESTSubsystemString>("String", 1 << ETESTDirectory)); 55 } 56 57 // Susbsystem sanity health 58 bool CTESTSubsystem::isAlive() const 59 { 60 assert(gacFwNamePropName != NULL); 61 return read(std::string(gacFwNamePropName) + "/isAlive") == "true"; 62 } 63 64 // Resynchronization after subsystem restart needed 65 bool CTESTSubsystem::needResync(bool bClear) 66 { 67 assert(gacFwNamePropName != NULL); 68 std::string strNeedResyncFile = std::string(gacFwNamePropName) + "/needResync"; 69 bool bNeedResync; 70 71 bNeedResync = read(strNeedResyncFile) == "true"; 72 73 if (!bNeedResync) { 74 75 // subsystem does not need resync 76 return false; 77 } else { 78 // subsystem needs resync 79 // If indicated, clear need resync state 80 if (bClear) { 81 82 write(strNeedResyncFile, "false"); 83 } 84 85 return true; 86 } 87 } 88 89 // Read boolean from file 90 std::string CTESTSubsystem::read(const std::string& strFileName) 91 { 92 std::ifstream file; 93 std::string strContent; 94 95 file.open(strFileName.c_str()); 96 97 file >> strContent; 98 99 return strContent; 100 } 101 102 // Write boolean to file 103 void CTESTSubsystem::write(const std::string& strFileName, const std::string& strContent) 104 { 105 std::ofstream file; 106 107 file.open(strFileName.c_str()); 108 109 assert(file.is_open()); 110 111 file << strContent; 112 } 113