mirror of
https://github.com/kvazar-network/kevacoin.git
synced 2025-01-12 08:08:25 +00:00
bitcoin-tx: Accept input via stdin. Add input handling to tests.
This commit is contained in:
parent
d789386371
commit
fb14452c6c
@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <boost/assign/list_of.hpp>
|
#include <boost/assign/list_of.hpp>
|
||||||
|
#include <boost/algorithm/string.hpp>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace boost::assign;
|
using namespace boost::assign;
|
||||||
@ -501,13 +502,34 @@ static void OutputTx(const CTransaction& tx)
|
|||||||
OutputTxHex(tx);
|
OutputTxHex(tx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static string readStdin()
|
||||||
|
{
|
||||||
|
char buf[4096];
|
||||||
|
string ret;
|
||||||
|
|
||||||
|
while (!feof(stdin)) {
|
||||||
|
size_t bread = fread(buf, 1, sizeof(buf), stdin);
|
||||||
|
ret.append(buf, bread);
|
||||||
|
if (bread < sizeof(buf))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ferror(stdin))
|
||||||
|
throw runtime_error("error reading stdin");
|
||||||
|
|
||||||
|
boost::algorithm::trim_right(ret);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static int CommandLineRawTx(int argc, char* argv[])
|
static int CommandLineRawTx(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
string strPrint;
|
string strPrint;
|
||||||
int nRet = 0;
|
int nRet = 0;
|
||||||
try {
|
try {
|
||||||
// Skip switches
|
// Skip switches; Permit common stdin convention "-"
|
||||||
while (argc > 1 && IsSwitchChar(argv[1][0])) {
|
while (argc > 1 && IsSwitchChar(argv[1][0]) &&
|
||||||
|
(argv[1][1] != 0)) {
|
||||||
argc--;
|
argc--;
|
||||||
argv++;
|
argv++;
|
||||||
}
|
}
|
||||||
@ -522,6 +544,8 @@ static int CommandLineRawTx(int argc, char* argv[])
|
|||||||
|
|
||||||
// param: hex-encoded bitcoin transaction
|
// param: hex-encoded bitcoin transaction
|
||||||
string strHexTx(argv[1]);
|
string strHexTx(argv[1]);
|
||||||
|
if (strHexTx == "-") // "-" implies standard input
|
||||||
|
strHexTx = readStdin();
|
||||||
|
|
||||||
if (!DecodeHexTx(txDecodeTmp, strHexTx))
|
if (!DecodeHexTx(txDecodeTmp, strHexTx))
|
||||||
throw runtime_error("invalid transaction encoding");
|
throw runtime_error("invalid transaction encoding");
|
||||||
|
@ -9,12 +9,20 @@ import sys
|
|||||||
|
|
||||||
def bctest(testDir, testObj):
|
def bctest(testDir, testObj):
|
||||||
execargs = testObj['exec']
|
execargs = testObj['exec']
|
||||||
|
|
||||||
|
stdinCfg = None
|
||||||
|
inputData = None
|
||||||
|
if "input" in testObj:
|
||||||
|
filename = testDir + "/" + testObj['input']
|
||||||
|
inputData = open(filename).read()
|
||||||
|
stdinCfg = subprocess.PIPE
|
||||||
|
|
||||||
outputFn = testObj['output_cmp']
|
outputFn = testObj['output_cmp']
|
||||||
outputData = open(testDir + "/" + outputFn).read()
|
outputData = open(testDir + "/" + outputFn).read()
|
||||||
|
|
||||||
proc = subprocess.Popen(execargs, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
proc = subprocess.Popen(execargs, stdin=stdinCfg, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||||
try:
|
try:
|
||||||
outs = proc.communicate()
|
outs = proc.communicate(input=inputData)
|
||||||
except OSError:
|
except OSError:
|
||||||
print("OSError, Failed to execute " + execargs[0])
|
print("OSError, Failed to execute " + execargs[0])
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
@ -1,5 +1,9 @@
|
|||||||
[
|
[
|
||||||
{ "exec": ["./bitcoin-tx", "-create"],
|
{ "exec": ["./bitcoin-tx", "-create"],
|
||||||
"output_cmp": "blanktx.hex"
|
"output_cmp": "blanktx.hex"
|
||||||
|
},
|
||||||
|
{ "exec": ["./bitcoin-tx", "-"],
|
||||||
|
"input": "blanktx.hex",
|
||||||
|
"output_cmp": "blanktx.hex"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
Loading…
Reference in New Issue
Block a user