def main(argv): hostname = "127.0.0.1" port = 8000 program = argv[0] logger.info(program) mockDirPath = None sslMode = False sslCert = None sslKey = None mockDir = None testEtagFlag = False responseTime = 0 timefromJson = False headers = False shortForm = False ssdpStart = False logger.info("Redfish Mockup Server, version {}".format(tool_version)) try: opts, args = getopt.getopt(argv[1:], "hTSPsEH:p:D:t:X", [ "help", "shortForm", "ssdp", "ssl", "TestEtag", "headers", "Host=", "Port=", "Dir=", "time=", "cert=", "key=" ]) except getopt.GetoptError: # usage() logger.info("Error parsing options") sys.stderr.flush() usage(program) sys.exit(2) for opt, arg in opts: if opt in ("-h", "--help"): usage(program) sys.exit(0) elif opt in ("-H", "--Host"): hostname = arg elif opt in ("-X", "--headers"): headers = True elif opt in ("-p", "--port"): port = int(arg) elif opt in ("-D", "--Dir"): mockDirPath = arg elif opt in ("-E", "--TestEtag"): testEtagFlag = True elif opt in ("-t", "--time"): responseTime = arg elif opt in ("-T"): timefromJson = True elif opt in ("-s", "--ssl"): sslMode = True elif opt in ("--cert", ): sslCert = arg elif opt in ("--key", ): sslKey = arg elif opt in ("-S", "--shortForm"): shortForm = True elif opt in ("-P", "--ssdp"): ssdpStart = True else: logger.info('unhandled option') sys.exit(2) logger.info('program: {}'.format(program)) logger.info('Hostname: {}'.format(hostname)) logger.info('Port: {}'.format(port)) logger.info("dir path specified by user:{}".format(mockDirPath)) logger.info("response time: {} seconds".format(responseTime)) # check if mockup path was specified. If not, use current working directory if mockDirPath is None: mockDirPath = os.getcwd() # create the full path to the top directory holding the Mockup mockDir = os.path.realpath( mockDirPath ) # creates real full path including path for CWD to the -D<mockDir> dir path logger.info("Serving Mockup in abs real directory path:{}".format(mockDir)) # check that we have a valid tall mockup--with /redfish in mockDir before proceeding if not shortForm: slashRedfishDir = os.path.join(mockDir, "redfish") if os.path.isdir(slashRedfishDir) is not True: logger.info( "ERROR: Invalid Mockup Directory--no /redfish directory at top. Aborting" ) sys.stderr.flush() sys.exit(1) if shortForm: if os.path.isdir(mockDir) is not True or os.path.isfile( os.path.join(mockDir, "index.json")) is not True: logger.info( "ERROR: Invalid Mockup Directory--dir or index.json does not exist" ) sys.stderr.flush() sys.exit(1) myServer = HTTPServer((hostname, port), RfMockupServer) if sslMode: logger.info("Using SSL with certfile: {}".format(sslCert)) myServer.socket = ssl.wrap_socket(myServer.socket, certfile=sslCert, keyfile=sslKey, server_side=True) # save the test flag, and real path to the mockup dir for the handler to use myServer.mockDir = mockDir myServer.testEtagFlag = testEtagFlag myServer.headers = headers myServer.timefromJson = timefromJson myServer.shortForm = shortForm try: myServer.responseTime = float(responseTime) except ValueError as e: logger.info("Enter a integer or float value") sys.exit(2) # myServer.me="HELLO" mySDDP = None if ssdpStart: # construct path "mockdir/path/to/resource/<filename>" fpath = myServer.construct_path('/redfish/v1', 'index.json') success, item = myServer.get_cached_link(fpath) protocol = '{}://'.format('https' if sslMode else 'http') mySDDP = RfSDDPServer( item, '{}{}:{}{}'.format(protocol, hostname, port, '/redfish/v1'), hostname) logger.info("Serving Redfish mockup on port: {}".format(port)) try: if mySDDP is not None: t2 = threading.Thread(target=mySDDP.start) t2.daemon = True t2.start() logger.info('running Server...') myServer.serve_forever() except KeyboardInterrupt: pass myServer.server_close() logger.info("Shutting down http server")