View Issue Details

IDProjectCategoryView StatusLast Update
0007151Talermerchant backoffice SPApublic2022-11-04 20:53
Reporterttn Assigned ToChristian Grothoff  
PrioritynormalSeverityminorReproducibilityhave not tried
Status closedResolutionreopened 
PlatformQEMUOSUbuntuOS Version20.04.3
Product Versiongit (master) 
Target Version0.9Fixed in Version0.9 
Summary0007151: "make check" fails on test-merchant-walletharness.sh
DescriptionThis was the only failure in all 4 VMs (2 Alpine, 1 Parabola, 1 Ubuntu).
Log attached.
TagsNo tags attached.
Attached Files
test-suite.log (37,740 bytes)   
======================================================
   taler-merchant 0.8.4: src/testing/test-suite.log
======================================================

# TOTAL: 9
# PASS:  2
# SKIP:  6
# XFAIL: 0
# FAIL:  1
# XPASS: 0
# ERROR: 0

.. contents:: :depth: 2

FAIL: test-merchant-walletharness.sh
====================================

2022-01-20T09:58:15.534Z taler-wallet-cli.ts TRACE running wallet-cli with [
  [
    "/usr/bin/node",
    "/usr/bin/taler-wallet-cli",
    "testing",
    "run-integrationtests",
    "--suites",
    "merchant"
  ]
]
testsuite root directory:  /home/ttn/te/tmp/taler-integrationtests-Jcqahv
running merchant-exchange-confusion with timeout 60000ms
running test merchant-exchange-confusion in worker process
running test merchant-exchange-confusion
running test in directory /home/ttn/te/tmp/taler-integrationtests-Jcqahv/merchant-exchange-confusion
running command taler-bank-manage -c '/home/ttn/te/tmp/taler-integrationtests-Jcqahv/merchant-exchange-confusion/bank.conf' django migrate
child process exited (127 / null)
FATAL: test failed with exception Error: Unexpected exit code 127 for 'taler-bank-manage -c '/home/ttn/te/tmp/taler-integrationtests-Jcqahv/merchant-exchange-confusion/bank.conf' django migrate'
    at ChildProcess.proc.on (/usr/share/taler-wallet-cli/node_modules/taler-wallet-cli/src/integrationtests/harness.ts:119:16)
    at ChildProcess.emit (events.js:198:13)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:248:12)
shutting down
test merchant-exchange-confusion finished in worker
process exited code=0 signal=null
parent: got result {"name":"merchant-exchange-confusion","timeSec":0.831,"status":"fail"}
running merchant-instances with timeout 60000ms
running test merchant-instances in worker process
running test merchant-instances
running test in directory /home/ttn/te/tmp/taler-integrationtests-Jcqahv/merchant-instances
spawning process (merchant-testmerchant-1): taler-merchant-httpd -LDEBUG -c '/home/ttn/te/tmp/taler-integrationtests-Jcqahv/merchant-instances/merchant-testmerchant-1.conf'
spawned process (merchant-testmerchant-1) with pid 10263
pinging merchant (testmerchant-1)
service merchant (testmerchant-1) not ready: Error: connect ECONNREFUSED 127.0.0.1:8083
pinging merchant (testmerchant-1)
service merchant (testmerchant-1) available
{ currency: 'TESTKUDOS',
  name: 'taler-merchant',
  version: '3:0:1' }
adding instance
adding instance
requesting instances with auth { method: 'external' }
{ Error: Request failed with status code 401
    at createError (/usr/share/taler-wallet-cli/node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/createError.js:16:15)
    at settle (/usr/share/taler-wallet-cli/node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/settle.js:17:12)
    at IncomingMessage.handleStreamEnd (/usr/share/taler-wallet-cli/node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/adapters/http.js:260:11)
    at IncomingMessage.emit (events.js:203:15)
    at endReadableNT (_stream_readable.js:1145:12)
    at process._tickCallback (internal/process/next_tick.js:63:19)
  config:
   { url: 'http://localhost:8083/management/instances',
     method: 'get',
     headers:
      { Accept: 'application/json, text/plain, */*',
        'User-Agent': 'axios/0.21.1' },
     transformRequest: [ [Function: transformRequest] ],
     transformResponse: [ [Function: transformResponse] ],
     timeout: 0,
     adapter: [Function: httpAdapter],
     xsrfCookieName: 'XSRF-TOKEN',
     xsrfHeaderName: 'X-XSRF-TOKEN',
     maxContentLength: -1,
     maxBodyLength: -1,
     validateStatus: [Function: validateStatus],
     data: undefined },
  request:
   ClientRequest {
     _events:
      [Object: null prototype] {
        socket: [Function],
        abort: [Function],
        aborted: [Function],
        connect: [Function],
        error: [Function],
        timeout: [Function],
        prefinish: [Function: requestOnPrefinish] },
     _eventsCount: 7,
     _maxListeners: undefined,
     output: [],
     outputEncodings: [],
     outputCallbacks: [],
     outputSize: 0,
     writable: true,
     _last: true,
     chunkedEncoding: false,
     shouldKeepAlive: false,
     useChunkedEncodingByDefault: false,
     sendDate: false,
     _removedConnection: false,
     _removedContLen: false,
     _removedTE: false,
     _contentLength: 0,
     _hasBody: true,
     _trailer: '',
     finished: true,
     _headerSent: true,
     socket:
      Socket {
        connecting: false,
        _hadError: false,
        _handle: [TCP],
        _parent: null,
        _host: 'localhost',
        _readableState: [ReadableState],
        readable: true,
        _events: [Object],
        _eventsCount: 7,
        _maxListeners: undefined,
        _writableState: [WritableState],
        writable: false,
        allowHalfOpen: false,
        _sockname: null,
        _pendingData: null,
        _pendingEncoding: '',
        server: null,
        _server: null,
        parser: null,
        _httpMessage: [Circular],
        [Symbol(asyncId)]: 327,
        [Symbol(lastWriteQueueSize)]: 0,
        [Symbol(timeout)]: null,
        [Symbol(kBytesRead)]: 0,
        [Symbol(kBytesWritten)]: 0 },
     connection:
      Socket {
        connecting: false,
        _hadError: false,
        _handle: [TCP],
        _parent: null,
        _host: 'localhost',
        _readableState: [ReadableState],
        readable: true,
        _events: [Object],
        _eventsCount: 7,
        _maxListeners: undefined,
        _writableState: [WritableState],
        writable: false,
        allowHalfOpen: false,
        _sockname: null,
        _pendingData: null,
        _pendingEncoding: '',
        server: null,
        _server: null,
        parser: null,
        _httpMessage: [Circular],
        [Symbol(asyncId)]: 327,
        [Symbol(lastWriteQueueSize)]: 0,
        [Symbol(timeout)]: null,
        [Symbol(kBytesRead)]: 0,
        [Symbol(kBytesWritten)]: 0 },
     _header:
      'GET /management/instances HTTP/1.1\r\nAccept: application/json, text/plain, */*\r\nUser-Agent: axios/0.21.1\r\nHost: localhost:8083\r\nConnection: close\r\n\r\n',
     _onPendingData: [Function: noopPendingOutput],
     agent:
      Agent {
        _events: [Object],
        _eventsCount: 1,
        _maxListeners: undefined,
        defaultPort: 80,
        protocol: 'http:',
        options: [Object],
        requests: {},
        sockets: [Object],
        freeSockets: {},
        keepAliveMsecs: 1000,
        keepAlive: false,
        maxSockets: Infinity,
        maxFreeSockets: 256 },
     socketPath: undefined,
     timeout: undefined,
     method: 'GET',
     insecureHTTPParser: undefined,
     path: '/management/instances',
     _ended: true,
     res:
      IncomingMessage {
        _readableState: [ReadableState],
        readable: false,
        _events: [Object],
        _eventsCount: 3,
        _maxListeners: undefined,
        socket: [Socket],
        connection: [Socket],
        httpVersionMajor: 1,
        httpVersionMinor: 1,
        httpVersion: '1.1',
        complete: true,
        headers: [Object],
        rawHeaders: [Array],
        trailers: {},
        rawTrailers: [],
        aborted: false,
        upgrade: false,
        url: '',
        method: null,
        statusCode: 401,
        statusMessage: 'Unauthorized',
        client: [Socket],
        _consuming: false,
        _dumped: false,
        req: [Circular],
        responseUrl: 'http://localhost:8083/management/instances',
        redirects: [] },
     aborted: undefined,
     timeoutCb: null,
     upgradeOrConnect: false,
     parser: null,
     maxHeadersCount: null,
     _redirectable:
      Writable {
        _writableState: [WritableState],
        writable: true,
        _events: [Object],
        _eventsCount: 2,
        _maxListeners: undefined,
        _options: [Object],
        _ended: true,
        _ending: true,
        _redirectCount: 0,
        _redirects: [],
        _requestBodyLength: 0,
        _requestBodyBuffers: [],
        _onNativeResponse: [Function],
        _currentRequest: [Circular],
        _currentUrl: 'http://localhost:8083/management/instances' },
     [Symbol(isCorked)]: false,
     [Symbol(outHeadersKey)]:
      [Object: null prototype] { accept: [Array], 'user-agent': [Array], host: [Array] } },
  response:
   { status: 401,
     statusText: 'Unauthorized',
     headers:
      { connection: 'close',
        'content-length': '138',
        'content-type': 'application/json',
        'access-control-expose-headers': '*',
        'access-control-allow-origin': '*',
        date: 'Thu, 20 Jan 2022 09:58:19 GMT' },
     config:
      { url: 'http://localhost:8083/management/instances',
        method: 'get',
        headers: [Object],
        transformRequest: [Array],
        transformResponse: [Array],
        timeout: 0,
        adapter: [Function: httpAdapter],
        xsrfCookieName: 'XSRF-TOKEN',
        xsrfHeaderName: 'X-XSRF-TOKEN',
        maxContentLength: -1,
        maxBodyLength: -1,
        validateStatus: [Function: validateStatus],
        data: undefined },
     request:
      ClientRequest {
        _events: [Object],
        _eventsCount: 7,
        _maxListeners: undefined,
        output: [],
        outputEncodings: [],
        outputCallbacks: [],
        outputSize: 0,
        writable: true,
        _last: true,
        chunkedEncoding: false,
        shouldKeepAlive: false,
        useChunkedEncodingByDefault: false,
        sendDate: false,
        _removedConnection: false,
        _removedContLen: false,
        _removedTE: false,
        _contentLength: 0,
        _hasBody: true,
        _trailer: '',
        finished: true,
        _headerSent: true,
        socket: [Socket],
        connection: [Socket],
        _header:
         'GET /management/instances HTTP/1.1\r\nAccept: application/json, text/plain, */*\r\nUser-Agent: axios/0.21.1\r\nHost: localhost:8083\r\nConnection: close\r\n\r\n',
        _onPendingData: [Function: noopPendingOutput],
        agent: [Agent],
        socketPath: undefined,
        timeout: undefined,
        method: 'GET',
        insecureHTTPParser: undefined,
        path: '/management/instances',
        _ended: true,
        res: [IncomingMessage],
        aborted: undefined,
        timeoutCb: null,
        upgradeOrConnect: false,
        parser: null,
        maxHeadersCount: null,
        _redirectable: [Writable],
        [Symbol(isCorked)]: false,
        [Symbol(outHeadersKey)]: [Object] },
     data:
      { code: 2015,
        hint:
         'The merchant refused the request due to lack of authorization.',
        detail: 'Check \'Authorization\' header' } },
  isAxiosError: true,
  toJSON: [Function: toJSON] }
{ Error: Request failed with status code 401
    at createError (/usr/share/taler-wallet-cli/node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/createError.js:16:15)
    at settle (/usr/share/taler-wallet-cli/node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/settle.js:17:12)
    at IncomingMessage.handleStreamEnd (/usr/share/taler-wallet-cli/node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/adapters/http.js:260:11)
    at IncomingMessage.emit (events.js:203:15)
    at endReadableNT (_stream_readable.js:1145:12)
    at process._tickCallback (internal/process/next_tick.js:63:19)
  config:
   { url: 'http://localhost:8083/management/instances/myinst',
     method: 'delete',
     headers:
      { Accept: 'application/json, text/plain, */*',
        'User-Agent': 'axios/0.21.1' },
     transformRequest: [ [Function: transformRequest] ],
     transformResponse: [ [Function: transformResponse] ],
     timeout: 0,
     adapter: [Function: httpAdapter],
     xsrfCookieName: 'XSRF-TOKEN',
     xsrfHeaderName: 'X-XSRF-TOKEN',
     maxContentLength: -1,
     maxBodyLength: -1,
     validateStatus: [Function: validateStatus],
     data: undefined },
  request:
   ClientRequest {
     _events:
      [Object: null prototype] {
        socket: [Function],
        abort: [Function],
        aborted: [Function],
        connect: [Function],
        error: [Function],
        timeout: [Function],
        prefinish: [Function: requestOnPrefinish] },
     _eventsCount: 7,
     _maxListeners: undefined,
     output: [],
     outputEncodings: [],
     outputCallbacks: [],
     outputSize: 0,
     writable: true,
     _last: true,
     chunkedEncoding: false,
     shouldKeepAlive: false,
     useChunkedEncodingByDefault: false,
     sendDate: false,
     _removedConnection: false,
     _removedContLen: false,
     _removedTE: false,
     _contentLength: 0,
     _hasBody: true,
     _trailer: '',
     finished: true,
     _headerSent: true,
     socket:
      Socket {
        connecting: false,
        _hadError: false,
        _handle: [TCP],
        _parent: null,
        _host: 'localhost',
        _readableState: [ReadableState],
        readable: true,
        _events: [Object],
        _eventsCount: 7,
        _maxListeners: undefined,
        _writableState: [WritableState],
        writable: false,
        allowHalfOpen: false,
        _sockname: null,
        _pendingData: null,
        _pendingEncoding: '',
        server: null,
        _server: null,
        parser: null,
        _httpMessage: [Circular],
        [Symbol(asyncId)]: 412,
        [Symbol(lastWriteQueueSize)]: 0,
        [Symbol(timeout)]: null,
        [Symbol(kBytesRead)]: 0,
        [Symbol(kBytesWritten)]: 0 },
     connection:
      Socket {
        connecting: false,
        _hadError: false,
        _handle: [TCP],
        _parent: null,
        _host: 'localhost',
        _readableState: [ReadableState],
        readable: true,
        _events: [Object],
        _eventsCount: 7,
        _maxListeners: undefined,
        _writableState: [WritableState],
        writable: false,
        allowHalfOpen: false,
        _sockname: null,
        _pendingData: null,
        _pendingEncoding: '',
        server: null,
        _server: null,
        parser: null,
        _httpMessage: [Circular],
        [Symbol(asyncId)]: 412,
        [Symbol(lastWriteQueueSize)]: 0,
        [Symbol(timeout)]: null,
        [Symbol(kBytesRead)]: 0,
        [Symbol(kBytesWritten)]: 0 },
     _header:
      'DELETE /management/instances/myinst HTTP/1.1\r\nAccept: application/json, text/plain, */*\r\nUser-Agent: axios/0.21.1\r\nHost: localhost:8083\r\nConnection: close\r\n\r\n',
     _onPendingData: [Function: noopPendingOutput],
     agent:
      Agent {
        _events: [Object],
        _eventsCount: 1,
        _maxListeners: undefined,
        defaultPort: 80,
        protocol: 'http:',
        options: [Object],
        requests: {},
        sockets: [Object],
        freeSockets: {},
        keepAliveMsecs: 1000,
        keepAlive: false,
        maxSockets: Infinity,
        maxFreeSockets: 256 },
     socketPath: undefined,
     timeout: undefined,
     method: 'DELETE',
     insecureHTTPParser: undefined,
     path: '/management/instances/myinst',
     _ended: true,
     res:
      IncomingMessage {
        _readableState: [ReadableState],
        readable: false,
        _events: [Object],
        _eventsCount: 3,
        _maxListeners: undefined,
        socket: [Socket],
        connection: [Socket],
        httpVersionMajor: 1,
        httpVersionMinor: 1,
        httpVersion: '1.1',
        complete: true,
        headers: [Object],
        rawHeaders: [Array],
        trailers: {},
        rawTrailers: [],
        aborted: false,
        upgrade: false,
        url: '',
        method: null,
        statusCode: 401,
        statusMessage: 'Unauthorized',
        client: [Socket],
        _consuming: false,
        _dumped: false,
        req: [Circular],
        responseUrl: 'http://localhost:8083/management/instances/myinst',
        redirects: [] },
     aborted: undefined,
     timeoutCb: null,
     upgradeOrConnect: false,
     parser: null,
     maxHeadersCount: null,
     _redirectable:
      Writable {
        _writableState: [WritableState],
        writable: true,
        _events: [Object],
        _eventsCount: 2,
        _maxListeners: undefined,
        _options: [Object],
        _ended: true,
        _ending: true,
        _redirectCount: 0,
        _redirects: [],
        _requestBodyLength: 0,
        _requestBodyBuffers: [],
        _onNativeResponse: [Function],
        _currentRequest: [Circular],
        _currentUrl: 'http://localhost:8083/management/instances/myinst' },
     [Symbol(isCorked)]: false,
     [Symbol(outHeadersKey)]:
      [Object: null prototype] { accept: [Array], 'user-agent': [Array], host: [Array] } },
  response:
   { status: 401,
     statusText: 'Unauthorized',
     headers:
      { connection: 'close',
        'content-length': '138',
        'content-type': 'application/json',
        'access-control-expose-headers': '*',
        'access-control-allow-origin': '*',
        date: 'Thu, 20 Jan 2022 09:58:19 GMT' },
     config:
      { url: 'http://localhost:8083/management/instances/myinst',
        method: 'delete',
        headers: [Object],
        transformRequest: [Array],
        transformResponse: [Array],
        timeout: 0,
        adapter: [Function: httpAdapter],
        xsrfCookieName: 'XSRF-TOKEN',
        xsrfHeaderName: 'X-XSRF-TOKEN',
        maxContentLength: -1,
        maxBodyLength: -1,
        validateStatus: [Function: validateStatus],
        data: undefined },
     request:
      ClientRequest {
        _events: [Object],
        _eventsCount: 7,
        _maxListeners: undefined,
        output: [],
        outputEncodings: [],
        outputCallbacks: [],
        outputSize: 0,
        writable: true,
        _last: true,
        chunkedEncoding: false,
        shouldKeepAlive: false,
        useChunkedEncodingByDefault: false,
        sendDate: false,
        _removedConnection: false,
        _removedContLen: false,
        _removedTE: false,
        _contentLength: 0,
        _hasBody: true,
        _trailer: '',
        finished: true,
        _headerSent: true,
        socket: [Socket],
        connection: [Socket],
        _header:
         'DELETE /management/instances/myinst HTTP/1.1\r\nAccept: application/json, text/plain, */*\r\nUser-Agent: axios/0.21.1\r\nHost: localhost:8083\r\nConnection: close\r\n\r\n',
        _onPendingData: [Function: noopPendingOutput],
        agent: [Agent],
        socketPath: undefined,
        timeout: undefined,
        method: 'DELETE',
        insecureHTTPParser: undefined,
        path: '/management/instances/myinst',
        _ended: true,
        res: [IncomingMessage],
        aborted: undefined,
        timeoutCb: null,
        upgradeOrConnect: false,
        parser: null,
        maxHeadersCount: null,
        _redirectable: [Writable],
        [Symbol(isCorked)]: false,
        [Symbol(outHeadersKey)]: [Object] },
     data:
      { code: 2015,
        hint:
         'The merchant refused the request due to lack of authorization.',
        detail: 'Check \'Authorization\' header' } },
  isAxiosError: true,
  toJSON: [Function: toJSON] }
shutting down
killing process 10263
process merchant-testmerchant-1 exited
test merchant-instances finished in worker
process exited code=0 signal=null
parent: got result {"name":"merchant-instances","timeSec":2.438,"status":"pass"}
running merchant-instances-delete with timeout 60000ms
running test merchant-instances-delete in worker process
running test merchant-instances-delete
running test in directory /home/ttn/te/tmp/taler-integrationtests-Jcqahv/merchant-instances-delete
spawning process (merchant-testmerchant-1): taler-merchant-httpd -LDEBUG -c '/home/ttn/te/tmp/taler-integrationtests-Jcqahv/merchant-instances-delete/merchant-testmerchant-1.conf'
spawned process (merchant-testmerchant-1) with pid 10322
pinging merchant (testmerchant-1)
service merchant (testmerchant-1) not ready: Error: connect ECONNREFUSED 127.0.0.1:8083
pinging merchant (testmerchant-1)
service merchant (testmerchant-1) available
{ currency: 'TESTKUDOS',
  name: 'taler-merchant',
  version: '3:0:1' }
adding instance
adding instance
Got expected exception { Error: Request failed with status code 401
    at createError (/usr/share/taler-wallet-cli/node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/createError.js:16:15)
    at settle (/usr/share/taler-wallet-cli/node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/settle.js:17:12)
    at IncomingMessage.handleStreamEnd (/usr/share/taler-wallet-cli/node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/adapters/http.js:260:11)
    at IncomingMessage.emit (events.js:203:15)
    at endReadableNT (_stream_readable.js:1145:12)
    at process._tickCallback (internal/process/next_tick.js:63:19)
  config:
   { url: 'http://localhost:8083/management/instances/myinst',
     method: 'delete',
     headers:
      { Accept: 'application/json, text/plain, */*',
        Authorization: 'Bearer secret-token:invalid',
        'User-Agent': 'axios/0.21.1' },
     transformRequest: [ [Function: transformRequest] ],
     transformResponse: [ [Function: transformResponse] ],
     timeout: 0,
     adapter: [Function: httpAdapter],
     xsrfCookieName: 'XSRF-TOKEN',
     xsrfHeaderName: 'X-XSRF-TOKEN',
     maxContentLength: -1,
     maxBodyLength: -1,
     validateStatus: [Function: validateStatus],
     data: undefined },
  request:
   ClientRequest {
     _events:
      [Object: null prototype] {
        socket: [Function],
        abort: [Function],
        aborted: [Function],
        connect: [Function],
        error: [Function],
        timeout: [Function],
        prefinish: [Function: requestOnPrefinish] },
     _eventsCount: 7,
     _maxListeners: undefined,
     output: [],
     outputEncodings: [],
     outputCallbacks: [],
     outputSize: 0,
     writable: true,
     _last: true,
     chunkedEncoding: false,
     shouldKeepAlive: false,
     useChunkedEncodingByDefault: false,
     sendDate: false,
     _removedConnection: false,
     _removedContLen: false,
     _removedTE: false,
     _contentLength: 0,
     _hasBody: true,
     _trailer: '',
     finished: true,
     _headerSent: true,
     socket:
      Socket {
        connecting: false,
        _hadError: false,
        _handle: [TCP],
        _parent: null,
        _host: 'localhost',
        _readableState: [ReadableState],
        readable: true,
        _events: [Object],
        _eventsCount: 7,
        _maxListeners: undefined,
        _writableState: [WritableState],
        writable: false,
        allowHalfOpen: false,
        _sockname: null,
        _pendingData: null,
        _pendingEncoding: '',
        server: null,
        _server: null,
        parser: null,
        _httpMessage: [Circular],
        [Symbol(asyncId)]: 262,
        [Symbol(lastWriteQueueSize)]: 0,
        [Symbol(timeout)]: null,
        [Symbol(kBytesRead)]: 0,
        [Symbol(kBytesWritten)]: 0 },
     connection:
      Socket {
        connecting: false,
        _hadError: false,
        _handle: [TCP],
        _parent: null,
        _host: 'localhost',
        _readableState: [ReadableState],
        readable: true,
        _events: [Object],
        _eventsCount: 7,
        _maxListeners: undefined,
        _writableState: [WritableState],
        writable: false,
        allowHalfOpen: false,
        _sockname: null,
        _pendingData: null,
        _pendingEncoding: '',
        server: null,
        _server: null,
        parser: null,
        _httpMessage: [Circular],
        [Symbol(asyncId)]: 262,
        [Symbol(lastWriteQueueSize)]: 0,
        [Symbol(timeout)]: null,
        [Symbol(kBytesRead)]: 0,
        [Symbol(kBytesWritten)]: 0 },
     _header:
      'DELETE /management/instances/myinst HTTP/1.1\r\nAccept: application/json, text/plain, */*\r\nAuthorization: Bearer secret-token:invalid\r\nUser-Agent: axios/0.21.1\r\nHost: localhost:8083\r\nConnection: close\r\n\r\n',
     _onPendingData: [Function: noopPendingOutput],
     agent:
      Agent {
        _events: [Object],
        _eventsCount: 1,
        _maxListeners: undefined,
        defaultPort: 80,
        protocol: 'http:',
        options: [Object],
        requests: {},
        sockets: [Object],
        freeSockets: {},
        keepAliveMsecs: 1000,
        keepAlive: false,
        maxSockets: Infinity,
        maxFreeSockets: 256 },
     socketPath: undefined,
     timeout: undefined,
     method: 'DELETE',
     insecureHTTPParser: undefined,
     path: '/management/instances/myinst',
     _ended: true,
     res:
      IncomingMessage {
        _readableState: [ReadableState],
        readable: false,
        _events: [Object],
        _eventsCount: 3,
        _maxListeners: undefined,
        socket: [Socket],
        connection: [Socket],
        httpVersionMajor: 1,
        httpVersionMinor: 1,
        httpVersion: '1.1',
        complete: true,
        headers: [Object],
        rawHeaders: [Array],
        trailers: {},
        rawTrailers: [],
        aborted: false,
        upgrade: false,
        url: '',
        method: null,
        statusCode: 401,
        statusMessage: 'Unauthorized',
        client: [Socket],
        _consuming: false,
        _dumped: false,
        req: [Circular],
        responseUrl: 'http://localhost:8083/management/instances/myinst',
        redirects: [] },
     aborted: undefined,
     timeoutCb: null,
     upgradeOrConnect: false,
     parser: null,
     maxHeadersCount: null,
     _redirectable:
      Writable {
        _writableState: [WritableState],
        writable: true,
        _events: [Object],
        _eventsCount: 2,
        _maxListeners: undefined,
        _options: [Object],
        _ended: true,
        _ending: true,
        _redirectCount: 0,
        _redirects: [],
        _requestBodyLength: 0,
        _requestBodyBuffers: [],
        _onNativeResponse: [Function],
        _currentRequest: [Circular],
        _currentUrl: 'http://localhost:8083/management/instances/myinst' },
     [Symbol(isCorked)]: false,
     [Symbol(outHeadersKey)]:
      [Object: null prototype] {
        accept: [Array],
        authorization: [Array],
        'user-agent': [Array],
        host: [Array] } },
  response:
   { status: 401,
     statusText: 'Unauthorized',
     headers:
      { connection: 'close',
        'content-length': '138',
        'content-type': 'application/json',
        'access-control-expose-headers': '*',
        'access-control-allow-origin': '*',
        date: 'Thu, 20 Jan 2022 09:58:22 GMT' },
     config:
      { url: 'http://localhost:8083/management/instances/myinst',
        method: 'delete',
        headers: [Object],
        transformRequest: [Array],
        transformResponse: [Array],
        timeout: 0,
        adapter: [Function: httpAdapter],
        xsrfCookieName: 'XSRF-TOKEN',
        xsrfHeaderName: 'X-XSRF-TOKEN',
        maxContentLength: -1,
        maxBodyLength: -1,
        validateStatus: [Function: validateStatus],
        data: undefined },
     request:
      ClientRequest {
        _events: [Object],
        _eventsCount: 7,
        _maxListeners: undefined,
        output: [],
        outputEncodings: [],
        outputCallbacks: [],
        outputSize: 0,
        writable: true,
        _last: true,
        chunkedEncoding: false,
        shouldKeepAlive: false,
        useChunkedEncodingByDefault: false,
        sendDate: false,
        _removedConnection: false,
        _removedContLen: false,
        _removedTE: false,
        _contentLength: 0,
        _hasBody: true,
        _trailer: '',
        finished: true,
        _headerSent: true,
        socket: [Socket],
        connection: [Socket],
        _header:
         'DELETE /management/instances/myinst HTTP/1.1\r\nAccept: application/json, text/plain, */*\r\nAuthorization: Bearer secret-token:invalid\r\nUser-Agent: axios/0.21.1\r\nHost: localhost:8083\r\nConnection: close\r\n\r\n',
        _onPendingData: [Function: noopPendingOutput],
        agent: [Agent],
        socketPath: undefined,
        timeout: undefined,
        method: 'DELETE',
        insecureHTTPParser: undefined,
        path: '/management/instances/myinst',
        _ended: true,
        res: [IncomingMessage],
        aborted: undefined,
        timeoutCb: null,
        upgradeOrConnect: false,
        parser: null,
        maxHeadersCount: null,
        _redirectable: [Writable],
        [Symbol(isCorked)]: false,
        [Symbol(outHeadersKey)]: [Object] },
     data:
      { code: 2015,
        hint:
         'The merchant refused the request due to lack of authorization.',
        detail: 'Check \'Authorization\' header' } },
  isAxiosError: true,
  toJSON: [Function: toJSON] }
shutting down
killing process 10322
process merchant-testmerchant-1 exited
test merchant-instances-delete finished in worker
process exited code=0 signal=null
parent: got result {"name":"merchant-instances-delete","timeSec":2.743,"status":"pass"}
running merchant-instances-urls with timeout 60000ms
running test merchant-instances-urls in worker process
running test merchant-instances-urls
running test in directory /home/ttn/te/tmp/taler-integrationtests-Jcqahv/merchant-instances-urls
spawning process (merchant-testmerchant-1): taler-merchant-httpd -LDEBUG -c '/home/ttn/te/tmp/taler-integrationtests-Jcqahv/merchant-instances-urls/merchant-testmerchant-1.conf'
spawned process (merchant-testmerchant-1) with pid 10381
pinging merchant (testmerchant-1)
service merchant (testmerchant-1) not ready: Error: connect ECONNREFUSED 127.0.0.1:8083
pinging merchant (testmerchant-1)
service merchant (testmerchant-1) available
checking http://localhost:8083/private/instances/default/instances/default/config, expected 404, got 404
checking http://localhost:8083/instances/default/private/instances, expected 404, got 404
checking http://localhost:8083/instances/foo/private/instances, expected 404, got 404
checking http://localhost:8083/instances/myinst/private/instances, expected 404, got 404
checking http://localhost:8083/config, expected 200, got 200
checking http://localhost:8083/instances/default/config, expected 200, got 200
checking http://localhost:8083/instances/myinst/config, expected 200, got 200
checking http://localhost:8083/instances/foo/config, expected 404, got 404
checking http://localhost:8083/instances/default/instances/config, expected 404, got 404
checking http://localhost:8083/private/instances/myinst/config, expected 404, got 404
checking http://localhost:8083/instances/myinst/private/orders, expected 401, got 401
checking http://localhost:8083/instances/myinst/private/orders, expected 401, got 401
checking http://localhost:8083/instances/myinst/private/orders, expected 200, got 200
checking http://localhost:8083/private/instances/myinst/orders, expected 404, got 404
shutting down
killing process 10381
process merchant-testmerchant-1 exited
test merchant-instances-urls finished in worker
process exited code=0 signal=null
parent: got result {"name":"merchant-instances-urls","timeSec":2.332,"status":"pass"}
running merchant-longpolling with timeout 60000ms
running test merchant-longpolling in worker process
running test merchant-longpolling
running test in directory /home/ttn/te/tmp/taler-integrationtests-Jcqahv/merchant-longpolling
running command taler-bank-manage -c '/home/ttn/te/tmp/taler-integrationtests-Jcqahv/merchant-longpolling/bank.conf' django migrate
child process exited (127 / null)
FATAL: test failed with exception Error: Unexpected exit code 127 for 'taler-bank-manage -c '/home/ttn/te/tmp/taler-integrationtests-Jcqahv/merchant-longpolling/bank.conf' django migrate'
    at ChildProcess.proc.on (/usr/share/taler-wallet-cli/node_modules/taler-wallet-cli/src/integrationtests/harness.ts:119:16)
    at ChildProcess.emit (events.js:198:13)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:248:12)
shutting down
test merchant-longpolling finished in worker
process exited code=0 signal=null
parent: got result {"name":"merchant-longpolling","timeSec":0.712,"status":"fail"}
running merchant-spec-public-orders with timeout 60000ms
running test merchant-spec-public-orders in worker process
running test merchant-spec-public-orders
running test in directory /home/ttn/te/tmp/taler-integrationtests-Jcqahv/merchant-spec-public-orders
running command taler-bank-manage -c '/home/ttn/te/tmp/taler-integrationtests-Jcqahv/merchant-spec-public-orders/bank.conf' django migrate
child process exited (127 / null)
FATAL: test failed with exception Error: Unexpected exit code 127 for 'taler-bank-manage -c '/home/ttn/te/tmp/taler-integrationtests-Jcqahv/merchant-spec-public-orders/bank.conf' django migrate'
    at ChildProcess.proc.on (/usr/share/taler-wallet-cli/node_modules/taler-wallet-cli/src/integrationtests/harness.ts:119:16)
    at ChildProcess.emit (events.js:198:13)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:248:12)
shutting down
test merchant-spec-public-orders finished in worker
process exited code=0 signal=null
parent: got result {"name":"merchant-spec-public-orders","timeSec":0.719,"status":"fail"}
running merchant-refund-api with timeout 60000ms
running test merchant-refund-api in worker process
running test merchant-refund-api
running test in directory /home/ttn/te/tmp/taler-integrationtests-Jcqahv/merchant-refund-api
running command taler-bank-manage -c '/home/ttn/te/tmp/taler-integrationtests-Jcqahv/merchant-refund-api/bank.conf' django migrate
child process exited (127 / null)
FATAL: test failed with exception Error: Unexpected exit code 127 for 'taler-bank-manage -c '/home/ttn/te/tmp/taler-integrationtests-Jcqahv/merchant-refund-api/bank.conf' django migrate'
    at ChildProcess.proc.on (/usr/share/taler-wallet-cli/node_modules/taler-wallet-cli/src/integrationtests/harness.ts:119:16)
    at ChildProcess.emit (events.js:198:13)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:248:12)
shutting down
test merchant-refund-api finished in worker
process exited code=0 signal=null
parent: got result {"name":"merchant-refund-api","timeSec":0.734,"status":"fail"}
running payment-forgettable with timeout 60000ms
running test payment-forgettable in worker process
running test payment-forgettable
running test in directory /home/ttn/te/tmp/taler-integrationtests-Jcqahv/payment-forgettable
running command taler-bank-manage -c '/home/ttn/te/tmp/taler-integrationtests-Jcqahv/payment-forgettable/bank.conf' django migrate
child process exited (127 / null)
FATAL: test failed with exception Error: Unexpected exit code 127 for 'taler-bank-manage -c '/home/ttn/te/tmp/taler-integrationtests-Jcqahv/payment-forgettable/bank.conf' django migrate'
    at ChildProcess.proc.on (/usr/share/taler-wallet-cli/node_modules/taler-wallet-cli/src/integrationtests/harness.ts:119:16)
    at ChildProcess.emit (events.js:198:13)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:248:12)
shutting down
test payment-forgettable finished in worker
process exited code=0 signal=null
parent: got result {"name":"payment-forgettable","timeSec":0.741,"status":"fail"}
running paywall-flow with timeout 60000ms
running test paywall-flow in worker process
running test paywall-flow
running test in directory /home/ttn/te/tmp/taler-integrationtests-Jcqahv/paywall-flow
running command taler-bank-manage -c '/home/ttn/te/tmp/taler-integrationtests-Jcqahv/paywall-flow/bank.conf' django migrate
child process exited (127 / null)
FATAL: test failed with exception Error: Unexpected exit code 127 for 'taler-bank-manage -c '/home/ttn/te/tmp/taler-integrationtests-Jcqahv/paywall-flow/bank.conf' django migrate'
    at ChildProcess.proc.on (/usr/share/taler-wallet-cli/node_modules/taler-wallet-cli/src/integrationtests/harness.ts:119:16)
    at ChildProcess.emit (events.js:198:13)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:248:12)
shutting down
test paywall-flow finished in worker
process exited code=0 signal=null
parent: got result {"name":"paywall-flow","timeSec":0.748,"status":"fail"}
See /home/ttn/te/tmp/taler-integrationtests-Jcqahv/results.json for details
Skipped: 0/9
Failed: 6/9
Passed: 3/9
FAIL test-merchant-walletharness.sh (exit status: 1)

SKIP: test_merchant_instance_response.sh
========================================

Testing for jqinitialize_taler_system.sh: line 64: jq: command not found
 SKIP: jq required
SKIP test_merchant_instance_response.sh (exit status: 77)

SKIP: test_merchant_product_creation.sh
=======================================

Testing for jqinitialize_taler_system.sh: line 64: jq: command not found
 SKIP: jq required
SKIP test_merchant_product_creation.sh (exit status: 77)

SKIP: test_merchant_reserve_creation.sh
=======================================

Testing for jqinitialize_taler_system.sh: line 64: jq: command not found
 SKIP: jq required
SKIP test_merchant_reserve_creation.sh (exit status: 77)

SKIP: test_merchant_order_creation.sh
=====================================

Testing for jqinitialize_taler_system.sh: line 64: jq: command not found
 SKIP: jq required
SKIP test_merchant_order_creation.sh (exit status: 77)

SKIP: test_merchant_instance_purge.sh
=====================================

Testing for jqinitialize_taler_system.sh: line 64: jq: command not found
 SKIP: jq required
SKIP test_merchant_instance_purge.sh (exit status: 77)

SKIP: test_merchant_transfer_tracking.sh
========================================

Testing for jqinitialize_taler_system.sh: line 64: jq: command not found
 SKIP: jq required
SKIP test_merchant_transfer_tracking.sh (exit status: 77)

test-suite.log (37,740 bytes)   

Relationships

related to 0007200 closedChristian Grothoff configure script accepts old MHD 
child of 0007208 closedFlorian Dold taler-wallet-cli does not exit failurefully if taler-bank-manage not found 

Activities

ttn

2022-01-20 11:30

developer   ~0018647

Forgot to mention: HEAD == 08618f9b74f8881680f0315328539b3d2900ce25

ttn

2022-01-25 05:28

developer   ~0018665

WIth newest (HEAD == 152b9b98282419937af410f53837bb7d3590c9a0), still fails.
Additionally, it looks like test_merchant_api fails as well.
Log attached.
test-suite.log.gz (45,028 bytes)

ttn

2022-03-03 00:24

developer   ~0018762

WIth HEAD == 79762a92ca0635074d62a2c4237003e87a6b0bb5, stil fails.
Log attached.
test-suite-2.log (37,739 bytes)   
======================================================
   taler-merchant 0.8.4: src/testing/test-suite.log
======================================================

# TOTAL: 10
# PASS:  3
# SKIP:  6
# XFAIL: 0
# FAIL:  1
# XPASS: 0
# ERROR: 0

.. contents:: :depth: 2

FAIL: test-merchant-walletharness.sh
====================================

2022-03-02T23:15:17.543Z taler-wallet-cli.ts TRACE running wallet-cli with [
  [
    "/usr/bin/node",
    "/usr/bin/taler-wallet-cli",
    "testing",
    "run-integrationtests",
    "--suites",
    "merchant"
  ]
]
testsuite root directory:  /home/ttn/te/tmp/taler-integrationtests-0zIKVV
running merchant-exchange-confusion with timeout 60000ms
running test merchant-exchange-confusion in worker process
running test merchant-exchange-confusion
running test in directory /home/ttn/te/tmp/taler-integrationtests-0zIKVV/merchant-exchange-confusion
running command taler-bank-manage -c '/home/ttn/te/tmp/taler-integrationtests-0zIKVV/merchant-exchange-confusion/bank.conf' django migrate
child process exited (127 / null)
FATAL: test failed with exception Error: Unexpected exit code 127 for 'taler-bank-manage -c '/home/ttn/te/tmp/taler-integrationtests-0zIKVV/merchant-exchange-confusion/bank.conf' django migrate'
    at ChildProcess.proc.on (/usr/share/taler-wallet-cli/node_modules/taler-wallet-cli/src/integrationtests/harness.ts:119:16)
    at ChildProcess.emit (events.js:198:13)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:248:12)
shutting down
test merchant-exchange-confusion finished in worker
process exited code=0 signal=null
parent: got result {"name":"merchant-exchange-confusion","timeSec":0.864,"status":"fail"}
running merchant-instances with timeout 60000ms
running test merchant-instances in worker process
running test merchant-instances
running test in directory /home/ttn/te/tmp/taler-integrationtests-0zIKVV/merchant-instances
spawning process (merchant-testmerchant-1): taler-merchant-httpd -LDEBUG -c '/home/ttn/te/tmp/taler-integrationtests-0zIKVV/merchant-instances/merchant-testmerchant-1.conf'
spawned process (merchant-testmerchant-1) with pid 16471
pinging merchant (testmerchant-1)
service merchant (testmerchant-1) not ready: Error: connect ECONNREFUSED 127.0.0.1:8083
pinging merchant (testmerchant-1)
service merchant (testmerchant-1) available
{ currency: 'TESTKUDOS',
  name: 'taler-merchant',
  version: '3:0:1' }
adding instance
adding instance
requesting instances with auth { method: 'external' }
{ Error: Request failed with status code 401
    at createError (/usr/share/taler-wallet-cli/node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/createError.js:16:15)
    at settle (/usr/share/taler-wallet-cli/node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/settle.js:17:12)
    at IncomingMessage.handleStreamEnd (/usr/share/taler-wallet-cli/node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/adapters/http.js:260:11)
    at IncomingMessage.emit (events.js:203:15)
    at endReadableNT (_stream_readable.js:1145:12)
    at process._tickCallback (internal/process/next_tick.js:63:19)
  config:
   { url: 'http://localhost:8083/management/instances',
     method: 'get',
     headers:
      { Accept: 'application/json, text/plain, */*',
        'User-Agent': 'axios/0.21.1' },
     transformRequest: [ [Function: transformRequest] ],
     transformResponse: [ [Function: transformResponse] ],
     timeout: 0,
     adapter: [Function: httpAdapter],
     xsrfCookieName: 'XSRF-TOKEN',
     xsrfHeaderName: 'X-XSRF-TOKEN',
     maxContentLength: -1,
     maxBodyLength: -1,
     validateStatus: [Function: validateStatus],
     data: undefined },
  request:
   ClientRequest {
     _events:
      [Object: null prototype] {
        socket: [Function],
        abort: [Function],
        aborted: [Function],
        connect: [Function],
        error: [Function],
        timeout: [Function],
        prefinish: [Function: requestOnPrefinish] },
     _eventsCount: 7,
     _maxListeners: undefined,
     output: [],
     outputEncodings: [],
     outputCallbacks: [],
     outputSize: 0,
     writable: true,
     _last: true,
     chunkedEncoding: false,
     shouldKeepAlive: false,
     useChunkedEncodingByDefault: false,
     sendDate: false,
     _removedConnection: false,
     _removedContLen: false,
     _removedTE: false,
     _contentLength: 0,
     _hasBody: true,
     _trailer: '',
     finished: true,
     _headerSent: true,
     socket:
      Socket {
        connecting: false,
        _hadError: false,
        _handle: [TCP],
        _parent: null,
        _host: 'localhost',
        _readableState: [ReadableState],
        readable: true,
        _events: [Object],
        _eventsCount: 7,
        _maxListeners: undefined,
        _writableState: [WritableState],
        writable: false,
        allowHalfOpen: false,
        _sockname: null,
        _pendingData: null,
        _pendingEncoding: '',
        server: null,
        _server: null,
        parser: null,
        _httpMessage: [Circular],
        [Symbol(asyncId)]: 330,
        [Symbol(lastWriteQueueSize)]: 0,
        [Symbol(timeout)]: null,
        [Symbol(kBytesRead)]: 0,
        [Symbol(kBytesWritten)]: 0 },
     connection:
      Socket {
        connecting: false,
        _hadError: false,
        _handle: [TCP],
        _parent: null,
        _host: 'localhost',
        _readableState: [ReadableState],
        readable: true,
        _events: [Object],
        _eventsCount: 7,
        _maxListeners: undefined,
        _writableState: [WritableState],
        writable: false,
        allowHalfOpen: false,
        _sockname: null,
        _pendingData: null,
        _pendingEncoding: '',
        server: null,
        _server: null,
        parser: null,
        _httpMessage: [Circular],
        [Symbol(asyncId)]: 330,
        [Symbol(lastWriteQueueSize)]: 0,
        [Symbol(timeout)]: null,
        [Symbol(kBytesRead)]: 0,
        [Symbol(kBytesWritten)]: 0 },
     _header:
      'GET /management/instances HTTP/1.1\r\nAccept: application/json, text/plain, */*\r\nUser-Agent: axios/0.21.1\r\nHost: localhost:8083\r\nConnection: close\r\n\r\n',
     _onPendingData: [Function: noopPendingOutput],
     agent:
      Agent {
        _events: [Object],
        _eventsCount: 1,
        _maxListeners: undefined,
        defaultPort: 80,
        protocol: 'http:',
        options: [Object],
        requests: {},
        sockets: [Object],
        freeSockets: {},
        keepAliveMsecs: 1000,
        keepAlive: false,
        maxSockets: Infinity,
        maxFreeSockets: 256 },
     socketPath: undefined,
     timeout: undefined,
     method: 'GET',
     insecureHTTPParser: undefined,
     path: '/management/instances',
     _ended: true,
     res:
      IncomingMessage {
        _readableState: [ReadableState],
        readable: false,
        _events: [Object],
        _eventsCount: 3,
        _maxListeners: undefined,
        socket: [Socket],
        connection: [Socket],
        httpVersionMajor: 1,
        httpVersionMinor: 1,
        httpVersion: '1.1',
        complete: true,
        headers: [Object],
        rawHeaders: [Array],
        trailers: {},
        rawTrailers: [],
        aborted: false,
        upgrade: false,
        url: '',
        method: null,
        statusCode: 401,
        statusMessage: 'Unauthorized',
        client: [Socket],
        _consuming: false,
        _dumped: false,
        req: [Circular],
        responseUrl: 'http://localhost:8083/management/instances',
        redirects: [] },
     aborted: undefined,
     timeoutCb: null,
     upgradeOrConnect: false,
     parser: null,
     maxHeadersCount: null,
     _redirectable:
      Writable {
        _writableState: [WritableState],
        writable: true,
        _events: [Object],
        _eventsCount: 2,
        _maxListeners: undefined,
        _options: [Object],
        _ended: true,
        _ending: true,
        _redirectCount: 0,
        _redirects: [],
        _requestBodyLength: 0,
        _requestBodyBuffers: [],
        _onNativeResponse: [Function],
        _currentRequest: [Circular],
        _currentUrl: 'http://localhost:8083/management/instances' },
     [Symbol(isCorked)]: false,
     [Symbol(outHeadersKey)]:
      [Object: null prototype] { accept: [Array], 'user-agent': [Array], host: [Array] } },
  response:
   { status: 401,
     statusText: 'Unauthorized',
     headers:
      { connection: 'close',
        'content-length': '138',
        'content-type': 'application/json',
        'access-control-expose-headers': '*',
        'access-control-allow-origin': '*',
        date: 'Wed, 02 Mar 2022 23:15:21 GMT' },
     config:
      { url: 'http://localhost:8083/management/instances',
        method: 'get',
        headers: [Object],
        transformRequest: [Array],
        transformResponse: [Array],
        timeout: 0,
        adapter: [Function: httpAdapter],
        xsrfCookieName: 'XSRF-TOKEN',
        xsrfHeaderName: 'X-XSRF-TOKEN',
        maxContentLength: -1,
        maxBodyLength: -1,
        validateStatus: [Function: validateStatus],
        data: undefined },
     request:
      ClientRequest {
        _events: [Object],
        _eventsCount: 7,
        _maxListeners: undefined,
        output: [],
        outputEncodings: [],
        outputCallbacks: [],
        outputSize: 0,
        writable: true,
        _last: true,
        chunkedEncoding: false,
        shouldKeepAlive: false,
        useChunkedEncodingByDefault: false,
        sendDate: false,
        _removedConnection: false,
        _removedContLen: false,
        _removedTE: false,
        _contentLength: 0,
        _hasBody: true,
        _trailer: '',
        finished: true,
        _headerSent: true,
        socket: [Socket],
        connection: [Socket],
        _header:
         'GET /management/instances HTTP/1.1\r\nAccept: application/json, text/plain, */*\r\nUser-Agent: axios/0.21.1\r\nHost: localhost:8083\r\nConnection: close\r\n\r\n',
        _onPendingData: [Function: noopPendingOutput],
        agent: [Agent],
        socketPath: undefined,
        timeout: undefined,
        method: 'GET',
        insecureHTTPParser: undefined,
        path: '/management/instances',
        _ended: true,
        res: [IncomingMessage],
        aborted: undefined,
        timeoutCb: null,
        upgradeOrConnect: false,
        parser: null,
        maxHeadersCount: null,
        _redirectable: [Writable],
        [Symbol(isCorked)]: false,
        [Symbol(outHeadersKey)]: [Object] },
     data:
      { code: 2015,
        hint:
         'The merchant refused the request due to lack of authorization.',
        detail: 'Check \'Authorization\' header' } },
  isAxiosError: true,
  toJSON: [Function: toJSON] }
{ Error: Request failed with status code 401
    at createError (/usr/share/taler-wallet-cli/node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/createError.js:16:15)
    at settle (/usr/share/taler-wallet-cli/node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/settle.js:17:12)
    at IncomingMessage.handleStreamEnd (/usr/share/taler-wallet-cli/node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/adapters/http.js:260:11)
    at IncomingMessage.emit (events.js:203:15)
    at endReadableNT (_stream_readable.js:1145:12)
    at process._tickCallback (internal/process/next_tick.js:63:19)
  config:
   { url: 'http://localhost:8083/management/instances/myinst',
     method: 'delete',
     headers:
      { Accept: 'application/json, text/plain, */*',
        'User-Agent': 'axios/0.21.1' },
     transformRequest: [ [Function: transformRequest] ],
     transformResponse: [ [Function: transformResponse] ],
     timeout: 0,
     adapter: [Function: httpAdapter],
     xsrfCookieName: 'XSRF-TOKEN',
     xsrfHeaderName: 'X-XSRF-TOKEN',
     maxContentLength: -1,
     maxBodyLength: -1,
     validateStatus: [Function: validateStatus],
     data: undefined },
  request:
   ClientRequest {
     _events:
      [Object: null prototype] {
        socket: [Function],
        abort: [Function],
        aborted: [Function],
        connect: [Function],
        error: [Function],
        timeout: [Function],
        prefinish: [Function: requestOnPrefinish] },
     _eventsCount: 7,
     _maxListeners: undefined,
     output: [],
     outputEncodings: [],
     outputCallbacks: [],
     outputSize: 0,
     writable: true,
     _last: true,
     chunkedEncoding: false,
     shouldKeepAlive: false,
     useChunkedEncodingByDefault: false,
     sendDate: false,
     _removedConnection: false,
     _removedContLen: false,
     _removedTE: false,
     _contentLength: 0,
     _hasBody: true,
     _trailer: '',
     finished: true,
     _headerSent: true,
     socket:
      Socket {
        connecting: false,
        _hadError: false,
        _handle: [TCP],
        _parent: null,
        _host: 'localhost',
        _readableState: [ReadableState],
        readable: true,
        _events: [Object],
        _eventsCount: 7,
        _maxListeners: undefined,
        _writableState: [WritableState],
        writable: false,
        allowHalfOpen: false,
        _sockname: null,
        _pendingData: null,
        _pendingEncoding: '',
        server: null,
        _server: null,
        parser: null,
        _httpMessage: [Circular],
        [Symbol(asyncId)]: 416,
        [Symbol(lastWriteQueueSize)]: 0,
        [Symbol(timeout)]: null,
        [Symbol(kBytesRead)]: 0,
        [Symbol(kBytesWritten)]: 0 },
     connection:
      Socket {
        connecting: false,
        _hadError: false,
        _handle: [TCP],
        _parent: null,
        _host: 'localhost',
        _readableState: [ReadableState],
        readable: true,
        _events: [Object],
        _eventsCount: 7,
        _maxListeners: undefined,
        _writableState: [WritableState],
        writable: false,
        allowHalfOpen: false,
        _sockname: null,
        _pendingData: null,
        _pendingEncoding: '',
        server: null,
        _server: null,
        parser: null,
        _httpMessage: [Circular],
        [Symbol(asyncId)]: 416,
        [Symbol(lastWriteQueueSize)]: 0,
        [Symbol(timeout)]: null,
        [Symbol(kBytesRead)]: 0,
        [Symbol(kBytesWritten)]: 0 },
     _header:
      'DELETE /management/instances/myinst HTTP/1.1\r\nAccept: application/json, text/plain, */*\r\nUser-Agent: axios/0.21.1\r\nHost: localhost:8083\r\nConnection: close\r\n\r\n',
     _onPendingData: [Function: noopPendingOutput],
     agent:
      Agent {
        _events: [Object],
        _eventsCount: 1,
        _maxListeners: undefined,
        defaultPort: 80,
        protocol: 'http:',
        options: [Object],
        requests: {},
        sockets: [Object],
        freeSockets: {},
        keepAliveMsecs: 1000,
        keepAlive: false,
        maxSockets: Infinity,
        maxFreeSockets: 256 },
     socketPath: undefined,
     timeout: undefined,
     method: 'DELETE',
     insecureHTTPParser: undefined,
     path: '/management/instances/myinst',
     _ended: true,
     res:
      IncomingMessage {
        _readableState: [ReadableState],
        readable: false,
        _events: [Object],
        _eventsCount: 3,
        _maxListeners: undefined,
        socket: [Socket],
        connection: [Socket],
        httpVersionMajor: 1,
        httpVersionMinor: 1,
        httpVersion: '1.1',
        complete: true,
        headers: [Object],
        rawHeaders: [Array],
        trailers: {},
        rawTrailers: [],
        aborted: false,
        upgrade: false,
        url: '',
        method: null,
        statusCode: 401,
        statusMessage: 'Unauthorized',
        client: [Socket],
        _consuming: false,
        _dumped: false,
        req: [Circular],
        responseUrl: 'http://localhost:8083/management/instances/myinst',
        redirects: [] },
     aborted: undefined,
     timeoutCb: null,
     upgradeOrConnect: false,
     parser: null,
     maxHeadersCount: null,
     _redirectable:
      Writable {
        _writableState: [WritableState],
        writable: true,
        _events: [Object],
        _eventsCount: 2,
        _maxListeners: undefined,
        _options: [Object],
        _ended: true,
        _ending: true,
        _redirectCount: 0,
        _redirects: [],
        _requestBodyLength: 0,
        _requestBodyBuffers: [],
        _onNativeResponse: [Function],
        _currentRequest: [Circular],
        _currentUrl: 'http://localhost:8083/management/instances/myinst' },
     [Symbol(isCorked)]: false,
     [Symbol(outHeadersKey)]:
      [Object: null prototype] { accept: [Array], 'user-agent': [Array], host: [Array] } },
  response:
   { status: 401,
     statusText: 'Unauthorized',
     headers:
      { connection: 'close',
        'content-length': '138',
        'content-type': 'application/json',
        'access-control-expose-headers': '*',
        'access-control-allow-origin': '*',
        date: 'Wed, 02 Mar 2022 23:15:21 GMT' },
     config:
      { url: 'http://localhost:8083/management/instances/myinst',
        method: 'delete',
        headers: [Object],
        transformRequest: [Array],
        transformResponse: [Array],
        timeout: 0,
        adapter: [Function: httpAdapter],
        xsrfCookieName: 'XSRF-TOKEN',
        xsrfHeaderName: 'X-XSRF-TOKEN',
        maxContentLength: -1,
        maxBodyLength: -1,
        validateStatus: [Function: validateStatus],
        data: undefined },
     request:
      ClientRequest {
        _events: [Object],
        _eventsCount: 7,
        _maxListeners: undefined,
        output: [],
        outputEncodings: [],
        outputCallbacks: [],
        outputSize: 0,
        writable: true,
        _last: true,
        chunkedEncoding: false,
        shouldKeepAlive: false,
        useChunkedEncodingByDefault: false,
        sendDate: false,
        _removedConnection: false,
        _removedContLen: false,
        _removedTE: false,
        _contentLength: 0,
        _hasBody: true,
        _trailer: '',
        finished: true,
        _headerSent: true,
        socket: [Socket],
        connection: [Socket],
        _header:
         'DELETE /management/instances/myinst HTTP/1.1\r\nAccept: application/json, text/plain, */*\r\nUser-Agent: axios/0.21.1\r\nHost: localhost:8083\r\nConnection: close\r\n\r\n',
        _onPendingData: [Function: noopPendingOutput],
        agent: [Agent],
        socketPath: undefined,
        timeout: undefined,
        method: 'DELETE',
        insecureHTTPParser: undefined,
        path: '/management/instances/myinst',
        _ended: true,
        res: [IncomingMessage],
        aborted: undefined,
        timeoutCb: null,
        upgradeOrConnect: false,
        parser: null,
        maxHeadersCount: null,
        _redirectable: [Writable],
        [Symbol(isCorked)]: false,
        [Symbol(outHeadersKey)]: [Object] },
     data:
      { code: 2015,
        hint:
         'The merchant refused the request due to lack of authorization.',
        detail: 'Check \'Authorization\' header' } },
  isAxiosError: true,
  toJSON: [Function: toJSON] }
shutting down
killing process 16471
process merchant-testmerchant-1 exited
test merchant-instances finished in worker
process exited code=0 signal=null
parent: got result {"name":"merchant-instances","timeSec":2.637,"status":"pass"}
running merchant-instances-delete with timeout 60000ms
running test merchant-instances-delete in worker process
running test merchant-instances-delete
running test in directory /home/ttn/te/tmp/taler-integrationtests-0zIKVV/merchant-instances-delete
spawning process (merchant-testmerchant-1): taler-merchant-httpd -LDEBUG -c '/home/ttn/te/tmp/taler-integrationtests-0zIKVV/merchant-instances-delete/merchant-testmerchant-1.conf'
spawned process (merchant-testmerchant-1) with pid 16530
pinging merchant (testmerchant-1)
service merchant (testmerchant-1) not ready: Error: connect ECONNREFUSED 127.0.0.1:8083
pinging merchant (testmerchant-1)
service merchant (testmerchant-1) available
{ currency: 'TESTKUDOS',
  name: 'taler-merchant',
  version: '3:0:1' }
adding instance
adding instance
Got expected exception { Error: Request failed with status code 401
    at createError (/usr/share/taler-wallet-cli/node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/createError.js:16:15)
    at settle (/usr/share/taler-wallet-cli/node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/settle.js:17:12)
    at IncomingMessage.handleStreamEnd (/usr/share/taler-wallet-cli/node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/adapters/http.js:260:11)
    at IncomingMessage.emit (events.js:203:15)
    at endReadableNT (_stream_readable.js:1145:12)
    at process._tickCallback (internal/process/next_tick.js:63:19)
  config:
   { url: 'http://localhost:8083/management/instances/myinst',
     method: 'delete',
     headers:
      { Accept: 'application/json, text/plain, */*',
        Authorization: 'Bearer secret-token:invalid',
        'User-Agent': 'axios/0.21.1' },
     transformRequest: [ [Function: transformRequest] ],
     transformResponse: [ [Function: transformResponse] ],
     timeout: 0,
     adapter: [Function: httpAdapter],
     xsrfCookieName: 'XSRF-TOKEN',
     xsrfHeaderName: 'X-XSRF-TOKEN',
     maxContentLength: -1,
     maxBodyLength: -1,
     validateStatus: [Function: validateStatus],
     data: undefined },
  request:
   ClientRequest {
     _events:
      [Object: null prototype] {
        socket: [Function],
        abort: [Function],
        aborted: [Function],
        connect: [Function],
        error: [Function],
        timeout: [Function],
        prefinish: [Function: requestOnPrefinish] },
     _eventsCount: 7,
     _maxListeners: undefined,
     output: [],
     outputEncodings: [],
     outputCallbacks: [],
     outputSize: 0,
     writable: true,
     _last: true,
     chunkedEncoding: false,
     shouldKeepAlive: false,
     useChunkedEncodingByDefault: false,
     sendDate: false,
     _removedConnection: false,
     _removedContLen: false,
     _removedTE: false,
     _contentLength: 0,
     _hasBody: true,
     _trailer: '',
     finished: true,
     _headerSent: true,
     socket:
      Socket {
        connecting: false,
        _hadError: false,
        _handle: [TCP],
        _parent: null,
        _host: 'localhost',
        _readableState: [ReadableState],
        readable: true,
        _events: [Object],
        _eventsCount: 7,
        _maxListeners: undefined,
        _writableState: [WritableState],
        writable: false,
        allowHalfOpen: false,
        _sockname: null,
        _pendingData: null,
        _pendingEncoding: '',
        server: null,
        _server: null,
        parser: null,
        _httpMessage: [Circular],
        [Symbol(asyncId)]: 259,
        [Symbol(lastWriteQueueSize)]: 0,
        [Symbol(timeout)]: null,
        [Symbol(kBytesRead)]: 0,
        [Symbol(kBytesWritten)]: 0 },
     connection:
      Socket {
        connecting: false,
        _hadError: false,
        _handle: [TCP],
        _parent: null,
        _host: 'localhost',
        _readableState: [ReadableState],
        readable: true,
        _events: [Object],
        _eventsCount: 7,
        _maxListeners: undefined,
        _writableState: [WritableState],
        writable: false,
        allowHalfOpen: false,
        _sockname: null,
        _pendingData: null,
        _pendingEncoding: '',
        server: null,
        _server: null,
        parser: null,
        _httpMessage: [Circular],
        [Symbol(asyncId)]: 259,
        [Symbol(lastWriteQueueSize)]: 0,
        [Symbol(timeout)]: null,
        [Symbol(kBytesRead)]: 0,
        [Symbol(kBytesWritten)]: 0 },
     _header:
      'DELETE /management/instances/myinst HTTP/1.1\r\nAccept: application/json, text/plain, */*\r\nAuthorization: Bearer secret-token:invalid\r\nUser-Agent: axios/0.21.1\r\nHost: localhost:8083\r\nConnection: close\r\n\r\n',
     _onPendingData: [Function: noopPendingOutput],
     agent:
      Agent {
        _events: [Object],
        _eventsCount: 1,
        _maxListeners: undefined,
        defaultPort: 80,
        protocol: 'http:',
        options: [Object],
        requests: {},
        sockets: [Object],
        freeSockets: {},
        keepAliveMsecs: 1000,
        keepAlive: false,
        maxSockets: Infinity,
        maxFreeSockets: 256 },
     socketPath: undefined,
     timeout: undefined,
     method: 'DELETE',
     insecureHTTPParser: undefined,
     path: '/management/instances/myinst',
     _ended: true,
     res:
      IncomingMessage {
        _readableState: [ReadableState],
        readable: false,
        _events: [Object],
        _eventsCount: 3,
        _maxListeners: undefined,
        socket: [Socket],
        connection: [Socket],
        httpVersionMajor: 1,
        httpVersionMinor: 1,
        httpVersion: '1.1',
        complete: true,
        headers: [Object],
        rawHeaders: [Array],
        trailers: {},
        rawTrailers: [],
        aborted: false,
        upgrade: false,
        url: '',
        method: null,
        statusCode: 401,
        statusMessage: 'Unauthorized',
        client: [Socket],
        _consuming: false,
        _dumped: false,
        req: [Circular],
        responseUrl: 'http://localhost:8083/management/instances/myinst',
        redirects: [] },
     aborted: undefined,
     timeoutCb: null,
     upgradeOrConnect: false,
     parser: null,
     maxHeadersCount: null,
     _redirectable:
      Writable {
        _writableState: [WritableState],
        writable: true,
        _events: [Object],
        _eventsCount: 2,
        _maxListeners: undefined,
        _options: [Object],
        _ended: true,
        _ending: true,
        _redirectCount: 0,
        _redirects: [],
        _requestBodyLength: 0,
        _requestBodyBuffers: [],
        _onNativeResponse: [Function],
        _currentRequest: [Circular],
        _currentUrl: 'http://localhost:8083/management/instances/myinst' },
     [Symbol(isCorked)]: false,
     [Symbol(outHeadersKey)]:
      [Object: null prototype] {
        accept: [Array],
        authorization: [Array],
        'user-agent': [Array],
        host: [Array] } },
  response:
   { status: 401,
     statusText: 'Unauthorized',
     headers:
      { connection: 'close',
        'content-length': '138',
        'content-type': 'application/json',
        'access-control-expose-headers': '*',
        'access-control-allow-origin': '*',
        date: 'Wed, 02 Mar 2022 23:15:24 GMT' },
     config:
      { url: 'http://localhost:8083/management/instances/myinst',
        method: 'delete',
        headers: [Object],
        transformRequest: [Array],
        transformResponse: [Array],
        timeout: 0,
        adapter: [Function: httpAdapter],
        xsrfCookieName: 'XSRF-TOKEN',
        xsrfHeaderName: 'X-XSRF-TOKEN',
        maxContentLength: -1,
        maxBodyLength: -1,
        validateStatus: [Function: validateStatus],
        data: undefined },
     request:
      ClientRequest {
        _events: [Object],
        _eventsCount: 7,
        _maxListeners: undefined,
        output: [],
        outputEncodings: [],
        outputCallbacks: [],
        outputSize: 0,
        writable: true,
        _last: true,
        chunkedEncoding: false,
        shouldKeepAlive: false,
        useChunkedEncodingByDefault: false,
        sendDate: false,
        _removedConnection: false,
        _removedContLen: false,
        _removedTE: false,
        _contentLength: 0,
        _hasBody: true,
        _trailer: '',
        finished: true,
        _headerSent: true,
        socket: [Socket],
        connection: [Socket],
        _header:
         'DELETE /management/instances/myinst HTTP/1.1\r\nAccept: application/json, text/plain, */*\r\nAuthorization: Bearer secret-token:invalid\r\nUser-Agent: axios/0.21.1\r\nHost: localhost:8083\r\nConnection: close\r\n\r\n',
        _onPendingData: [Function: noopPendingOutput],
        agent: [Agent],
        socketPath: undefined,
        timeout: undefined,
        method: 'DELETE',
        insecureHTTPParser: undefined,
        path: '/management/instances/myinst',
        _ended: true,
        res: [IncomingMessage],
        aborted: undefined,
        timeoutCb: null,
        upgradeOrConnect: false,
        parser: null,
        maxHeadersCount: null,
        _redirectable: [Writable],
        [Symbol(isCorked)]: false,
        [Symbol(outHeadersKey)]: [Object] },
     data:
      { code: 2015,
        hint:
         'The merchant refused the request due to lack of authorization.',
        detail: 'Check \'Authorization\' header' } },
  isAxiosError: true,
  toJSON: [Function: toJSON] }
shutting down
killing process 16530
process merchant-testmerchant-1 exited
test merchant-instances-delete finished in worker
process exited code=0 signal=null
parent: got result {"name":"merchant-instances-delete","timeSec":2.73,"status":"pass"}
running merchant-instances-urls with timeout 60000ms
running test merchant-instances-urls in worker process
running test merchant-instances-urls
running test in directory /home/ttn/te/tmp/taler-integrationtests-0zIKVV/merchant-instances-urls
spawning process (merchant-testmerchant-1): taler-merchant-httpd -LDEBUG -c '/home/ttn/te/tmp/taler-integrationtests-0zIKVV/merchant-instances-urls/merchant-testmerchant-1.conf'
spawned process (merchant-testmerchant-1) with pid 16589
pinging merchant (testmerchant-1)
service merchant (testmerchant-1) not ready: Error: connect ECONNREFUSED 127.0.0.1:8083
pinging merchant (testmerchant-1)
service merchant (testmerchant-1) available
checking http://localhost:8083/private/instances/default/instances/default/config, expected 404, got 404
checking http://localhost:8083/instances/default/private/instances, expected 404, got 404
checking http://localhost:8083/instances/foo/private/instances, expected 404, got 404
checking http://localhost:8083/instances/myinst/private/instances, expected 404, got 404
checking http://localhost:8083/config, expected 200, got 200
checking http://localhost:8083/instances/default/config, expected 200, got 200
checking http://localhost:8083/instances/myinst/config, expected 200, got 200
checking http://localhost:8083/instances/foo/config, expected 404, got 404
checking http://localhost:8083/instances/default/instances/config, expected 404, got 404
checking http://localhost:8083/private/instances/myinst/config, expected 404, got 404
checking http://localhost:8083/instances/myinst/private/orders, expected 401, got 401
checking http://localhost:8083/instances/myinst/private/orders, expected 401, got 401
checking http://localhost:8083/instances/myinst/private/orders, expected 200, got 200
checking http://localhost:8083/private/instances/myinst/orders, expected 404, got 404
shutting down
killing process 16589
process merchant-testmerchant-1 exited
test merchant-instances-urls finished in worker
process exited code=0 signal=null
parent: got result {"name":"merchant-instances-urls","timeSec":2.281,"status":"pass"}
running merchant-longpolling with timeout 60000ms
running test merchant-longpolling in worker process
running test merchant-longpolling
running test in directory /home/ttn/te/tmp/taler-integrationtests-0zIKVV/merchant-longpolling
running command taler-bank-manage -c '/home/ttn/te/tmp/taler-integrationtests-0zIKVV/merchant-longpolling/bank.conf' django migrate
child process exited (127 / null)
FATAL: test failed with exception Error: Unexpected exit code 127 for 'taler-bank-manage -c '/home/ttn/te/tmp/taler-integrationtests-0zIKVV/merchant-longpolling/bank.conf' django migrate'
    at ChildProcess.proc.on (/usr/share/taler-wallet-cli/node_modules/taler-wallet-cli/src/integrationtests/harness.ts:119:16)
    at ChildProcess.emit (events.js:198:13)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:248:12)
shutting down
test merchant-longpolling finished in worker
process exited code=0 signal=null
parent: got result {"name":"merchant-longpolling","timeSec":0.713,"status":"fail"}
running merchant-spec-public-orders with timeout 60000ms
running test merchant-spec-public-orders in worker process
running test merchant-spec-public-orders
running test in directory /home/ttn/te/tmp/taler-integrationtests-0zIKVV/merchant-spec-public-orders
running command taler-bank-manage -c '/home/ttn/te/tmp/taler-integrationtests-0zIKVV/merchant-spec-public-orders/bank.conf' django migrate
child process exited (127 / null)
FATAL: test failed with exception Error: Unexpected exit code 127 for 'taler-bank-manage -c '/home/ttn/te/tmp/taler-integrationtests-0zIKVV/merchant-spec-public-orders/bank.conf' django migrate'
    at ChildProcess.proc.on (/usr/share/taler-wallet-cli/node_modules/taler-wallet-cli/src/integrationtests/harness.ts:119:16)
    at ChildProcess.emit (events.js:198:13)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:248:12)
shutting down
test merchant-spec-public-orders finished in worker
process exited code=0 signal=null
parent: got result {"name":"merchant-spec-public-orders","timeSec":0.645,"status":"fail"}
running merchant-refund-api with timeout 60000ms
running test merchant-refund-api in worker process
running test merchant-refund-api
running test in directory /home/ttn/te/tmp/taler-integrationtests-0zIKVV/merchant-refund-api
running command taler-bank-manage -c '/home/ttn/te/tmp/taler-integrationtests-0zIKVV/merchant-refund-api/bank.conf' django migrate
child process exited (127 / null)
FATAL: test failed with exception Error: Unexpected exit code 127 for 'taler-bank-manage -c '/home/ttn/te/tmp/taler-integrationtests-0zIKVV/merchant-refund-api/bank.conf' django migrate'
    at ChildProcess.proc.on (/usr/share/taler-wallet-cli/node_modules/taler-wallet-cli/src/integrationtests/harness.ts:119:16)
    at ChildProcess.emit (events.js:198:13)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:248:12)
shutting down
test merchant-refund-api finished in worker
process exited code=0 signal=null
parent: got result {"name":"merchant-refund-api","timeSec":0.744,"status":"fail"}
running payment-forgettable with timeout 60000ms
running test payment-forgettable in worker process
running test payment-forgettable
running test in directory /home/ttn/te/tmp/taler-integrationtests-0zIKVV/payment-forgettable
running command taler-bank-manage -c '/home/ttn/te/tmp/taler-integrationtests-0zIKVV/payment-forgettable/bank.conf' django migrate
child process exited (127 / null)
FATAL: test failed with exception Error: Unexpected exit code 127 for 'taler-bank-manage -c '/home/ttn/te/tmp/taler-integrationtests-0zIKVV/payment-forgettable/bank.conf' django migrate'
    at ChildProcess.proc.on (/usr/share/taler-wallet-cli/node_modules/taler-wallet-cli/src/integrationtests/harness.ts:119:16)
    at ChildProcess.emit (events.js:198:13)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:248:12)
shutting down
test payment-forgettable finished in worker
process exited code=0 signal=null
parent: got result {"name":"payment-forgettable","timeSec":0.75,"status":"fail"}
running paywall-flow with timeout 60000ms
running test paywall-flow in worker process
running test paywall-flow
running test in directory /home/ttn/te/tmp/taler-integrationtests-0zIKVV/paywall-flow
running command taler-bank-manage -c '/home/ttn/te/tmp/taler-integrationtests-0zIKVV/paywall-flow/bank.conf' django migrate
child process exited (127 / null)
FATAL: test failed with exception Error: Unexpected exit code 127 for 'taler-bank-manage -c '/home/ttn/te/tmp/taler-integrationtests-0zIKVV/paywall-flow/bank.conf' django migrate'
    at ChildProcess.proc.on (/usr/share/taler-wallet-cli/node_modules/taler-wallet-cli/src/integrationtests/harness.ts:119:16)
    at ChildProcess.emit (events.js:198:13)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:248:12)
shutting down
test paywall-flow finished in worker
process exited code=0 signal=null
parent: got result {"name":"paywall-flow","timeSec":0.725,"status":"fail"}
See /home/ttn/te/tmp/taler-integrationtests-0zIKVV/results.json for details
Skipped: 0/9
Failed: 6/9
Passed: 3/9
FAIL test-merchant-walletharness.sh (exit status: 1)

SKIP: test_merchant_instance_response.sh
========================================

Testing for jqinitialize_taler_system.sh: line 64: jq: command not found
 SKIP: jq required
SKIP test_merchant_instance_response.sh (exit status: 77)

SKIP: test_merchant_product_creation.sh
=======================================

Testing for jqinitialize_taler_system.sh: line 64: jq: command not found
 SKIP: jq required
SKIP test_merchant_product_creation.sh (exit status: 77)

SKIP: test_merchant_reserve_creation.sh
=======================================

Testing for jqinitialize_taler_system.sh: line 64: jq: command not found
 SKIP: jq required
SKIP test_merchant_reserve_creation.sh (exit status: 77)

SKIP: test_merchant_order_creation.sh
=====================================

Testing for jqinitialize_taler_system.sh: line 64: jq: command not found
 SKIP: jq required
SKIP test_merchant_order_creation.sh (exit status: 77)

SKIP: test_merchant_instance_purge.sh
=====================================

Testing for jqinitialize_taler_system.sh: line 64: jq: command not found
 SKIP: jq required
SKIP test_merchant_instance_purge.sh (exit status: 77)

SKIP: test_merchant_transfer_tracking.sh
========================================

Testing for jqinitialize_taler_system.sh: line 64: jq: command not found
 SKIP: jq required
SKIP test_merchant_transfer_tracking.sh (exit status: 77)

test-suite-2.log (37,739 bytes)   

ttn

2022-03-18 06:43

developer   ~0018805

With HEAD == 1cd108d14e73c9fc0d4cc8555d8c16d08796f365, still fails.
(Dumps core, now.)
Logs attached.
.ttn.merchant-make-check.log (7,238 bytes)   
+ export PATH=/home/ttn/te/bin:/mnt/hack:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
+ PATH=/home/ttn/te/bin:/mnt/hack:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
+ export TMPDIR=/home/ttn/te/tmp
+ TMPDIR=/home/ttn/te/tmp
+ export PGHOST=/home/ttn/te/pg
+ PGHOST=/home/ttn/te/pg
+ make check
Making check in .
make[1]: Entering directory '/home/ttn/build/GNU/T/merchant'
make[1]: Leaving directory '/home/ttn/build/GNU/T/merchant'
Making check in src
make[1]: Entering directory '/home/ttn/build/GNU/T/merchant/src'
Making check in include
make[2]: Entering directory '/home/ttn/build/GNU/T/merchant/src/include'
make[2]: Nothing to be done for 'check'.
make[2]: Leaving directory '/home/ttn/build/GNU/T/merchant/src/include'
Making check in mustach
make[2]: Entering directory '/home/ttn/build/GNU/T/merchant/src/mustach'
make  test_mustach_jansson run-original-tests.sh
make[3]: Entering directory '/home/ttn/build/GNU/T/merchant/src/mustach'
  CC       test_mustach_jansson.o
  CCLD     test_mustach_jansson
make[3]: Nothing to be done for 'run-original-tests.sh'.
make[3]: Leaving directory '/home/ttn/build/GNU/T/merchant/src/mustach'
make  check-TESTS
make[3]: Entering directory '/home/ttn/build/GNU/T/merchant/src/mustach'
make[4]: Entering directory '/home/ttn/build/GNU/T/merchant/src/mustach'
SKIP: run-original-tests.sh
PASS: test_mustach_jansson
============================================================================
Testsuite summary for taler-merchant 0.8.4
============================================================================
# TOTAL: 2
# PASS:  1
# SKIP:  1
# XFAIL: 0
# FAIL:  0
# XPASS: 0
# ERROR: 0
============================================================================
make[4]: Leaving directory '/home/ttn/build/GNU/T/merchant/src/mustach'
make[3]: Leaving directory '/home/ttn/build/GNU/T/merchant/src/mustach'
make[2]: Leaving directory '/home/ttn/build/GNU/T/merchant/src/mustach'
Making check in backenddb
make[2]: Entering directory '/home/ttn/build/GNU/T/merchant/src/backenddb'
make  test-merchantdb-postgres
make[3]: Entering directory '/home/ttn/build/GNU/T/merchant/src/backenddb'
  CC       test_merchantdb.o
  CCLD     test-merchantdb-postgres
make[3]: Leaving directory '/home/ttn/build/GNU/T/merchant/src/backenddb'
make  check-TESTS
make[3]: Entering directory '/home/ttn/build/GNU/T/merchant/src/backenddb'
make[4]: Entering directory '/home/ttn/build/GNU/T/merchant/src/backenddb'
PASS: test-merchantdb-postgres
============================================================================
Testsuite summary for taler-merchant 0.8.4
============================================================================
# TOTAL: 1
# PASS:  1
# SKIP:  0
# XFAIL: 0
# FAIL:  0
# XPASS: 0
# ERROR: 0
============================================================================
make[4]: Leaving directory '/home/ttn/build/GNU/T/merchant/src/backenddb'
make[3]: Leaving directory '/home/ttn/build/GNU/T/merchant/src/backenddb'
make[2]: Leaving directory '/home/ttn/build/GNU/T/merchant/src/backenddb'
Making check in backend
make[2]: Entering directory '/home/ttn/build/GNU/T/merchant/src/backend'
make[2]: Nothing to be done for 'check'.
make[2]: Leaving directory '/home/ttn/build/GNU/T/merchant/src/backend'
Making check in lib
make[2]: Entering directory '/home/ttn/build/GNU/T/merchant/src/lib'
make  test_merchant_api_common
make[3]: Entering directory '/home/ttn/build/GNU/T/merchant/src/lib'
  CC       test_merchant_api_common.o
  CCLD     test_merchant_api_common
make[3]: Leaving directory '/home/ttn/build/GNU/T/merchant/src/lib'
make  check-TESTS
make[3]: Entering directory '/home/ttn/build/GNU/T/merchant/src/lib'
make[4]: Entering directory '/home/ttn/build/GNU/T/merchant/src/lib'
PASS: test_merchant_api_common
============================================================================
Testsuite summary for taler-merchant 0.8.4
============================================================================
# TOTAL: 1
# PASS:  1
# SKIP:  0
# XFAIL: 0
# FAIL:  0
# XPASS: 0
# ERROR: 0
============================================================================
make[4]: Leaving directory '/home/ttn/build/GNU/T/merchant/src/lib'
make[3]: Leaving directory '/home/ttn/build/GNU/T/merchant/src/lib'
make[2]: Leaving directory '/home/ttn/build/GNU/T/merchant/src/lib'
Making check in testing
make[2]: Entering directory '/home/ttn/build/GNU/T/merchant/src/testing'
make  test_merchant_api_cs test_merchant_api_rsa test_kyc_api  test-merchant-walletharness.sh test_merchant_instance_response.sh test_merchant_product_creation.sh test_merchant_reserve_creation.sh test_merchant_order_creation.sh test_merchant_instance_purge.sh test_merchant_transfer_tracking.sh
make[3]: Entering directory '/home/ttn/build/GNU/T/merchant/src/testing'
  CC       test_merchant_api.o
  CCLD     test_merchant_api_cs
  CCLD     test_merchant_api_rsa
  CC       test_kyc_api.o
  CCLD     test_kyc_api
make[3]: Nothing to be done for 'test-merchant-walletharness.sh'.
make[3]: Nothing to be done for 'test_merchant_instance_response.sh'.
make[3]: Nothing to be done for 'test_merchant_product_creation.sh'.
make[3]: Nothing to be done for 'test_merchant_reserve_creation.sh'.
make[3]: Nothing to be done for 'test_merchant_order_creation.sh'.
make[3]: Nothing to be done for 'test_merchant_instance_purge.sh'.
make[3]: Nothing to be done for 'test_merchant_transfer_tracking.sh'.
make[3]: Leaving directory '/home/ttn/build/GNU/T/merchant/src/testing'
make  check-TESTS
make[3]: Entering directory '/home/ttn/build/GNU/T/merchant/src/testing'
make[4]: Entering directory '/home/ttn/build/GNU/T/merchant/src/testing'
PASS: test_merchant_api_cs
../../test-driver: line 107: 10455 Aborted                 (core dumped) "$@" > $log_file 2>&1
FAIL: test_merchant_api_rsa
SKIP: test_kyc_api
FAIL: test-merchant-walletharness.sh
SKIP: test_merchant_instance_response.sh
SKIP: test_merchant_product_creation.sh
SKIP: test_merchant_reserve_creation.sh
SKIP: test_merchant_order_creation.sh
SKIP: test_merchant_instance_purge.sh
SKIP: test_merchant_transfer_tracking.sh
============================================================================
Testsuite summary for taler-merchant 0.8.4
============================================================================
# TOTAL: 10
# PASS:  1
# SKIP:  7
# XFAIL: 0
# FAIL:  2
# XPASS: 0
# ERROR: 0
============================================================================
See src/testing/test-suite.log
Please report to taler-bug@gnunet.org
============================================================================
make[4]: *** [Makefile:1156: test-suite.log] Error 1
make[4]: Leaving directory '/home/ttn/build/GNU/T/merchant/src/testing'
make[3]: *** [Makefile:1264: check-TESTS] Error 2
make[3]: Leaving directory '/home/ttn/build/GNU/T/merchant/src/testing'
make[2]: *** [Makefile:1415: check-am] Error 2
make[2]: Leaving directory '/home/ttn/build/GNU/T/merchant/src/testing'
make[1]: *** [Makefile:413: check-recursive] Error 1
make[1]: Leaving directory '/home/ttn/build/GNU/T/merchant/src'
make: *** [Makefile:472: check-recursive] Error 1
.ttn.merchant-make-check.log (7,238 bytes)   
test-suite.log-2.gz (63,774 bytes)

Christian Grothoff

2022-03-18 16:18

manager   ~0018806

void
GNUNET_CURL_fini (struct GNUNET_CURL_Context *ctx)
{
  /* all jobs must have been cancelled at this time, assert this */
  GNUNET_assert (NULL == ctx->jobs_head);

=> that is the failing assertion. However, it doesn't fail here for me. Can you:
1) report your MHD version?
2) tell us what ctx->jobs_head contains (using gdb on the core, print *ctx->jobs_head)

ttn

2022-03-18 20:56

developer   ~0018807

Unfortunately, the core file is not very helpful:

(gdb) p ctx->jobs_head
value has been optimized out

OTOH, i can report the MHD version:

ttn@bub:~/build/GNU/T/merchant/src/testing$ apt-cache show libmicrohttpd-dev
Package: libmicrohttpd-dev
Architecture: amd64
Version: 0.9.66-1
Priority: optional
Section: universe/libdevel
Source: libmicrohttpd
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Bertrand Marc <bmarc@debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 532
Depends: libmicrohttpd12 (= 0.9.66-1), libgnutls28-dev, libgcrypt-dev

I see that 0.9.66 is less than 0.9.71, which is the documented minimum.
I'll try to install a newer version and see what happens...

Christian Grothoff

2022-03-19 00:38

manager   ~0018808

Do compile it with debug symbols, too. Please.

ttn

2022-03-19 07:38

developer   ~0018809

I recompiled GNUnet and merchant both with '-g -O0' and was able to reproduce the core dump.

Here's what i see:

(gdb) up
#3 0x00007fa15e52cb65 in GNUNET_CURL_fini (ctx=0x55c95f826c80) at curl.c:819
819 GNUNET_assert (NULL == ctx->jobs_head);
(gdb) p ctx->jobs_head
$1 = (struct GNUNET_CURL_Job *) 0x55c95f8d6f30
(gdb) p *ctx->jobs_head
$2 = {next = 0x0, prev = 0x0, easy_handle = 0x55c95f8ca240, ctx = 0x55c95f826c80, jcc = 0x7fa15e550a70 <version_completed_cb>,
  jcc_cls = 0x55c95f8b54e0, jcc_raw = 0x0, jcc_raw_cls = 0x0, db = {buf = 0x0, buf_size = 0, eno = 0}, job_headers = 0x55c95f8bda10}
(gdb) p ctx->jobs_head->easy_handle
$3 = (CURL *) 0x55c95f8ca240
(gdb) p *ctx->jobs_head->easy_handle
Attempt to dereference a generic pointer.
(gdb) p *ctx->jobs_head->ctx
$4 = {multi = 0x55c95f8218d0, share = 0x55c95f826290, jobs_head = 0x55c95f8d6f30, jobs_tail = 0x55c95f8d6f30,
  common_headers = 0x55c95f8160f0, async_scope_id_header = 0x7fa15e913f70 "Taler-Correlation-Id",
  cb = 0x7fa15e52d270 <GNUNET_CURL_gnunet_scheduler_reschedule>, cb_cls = 0x7ffea4a0f688, userpass = 0x0, certtype = 0x0,
  certfile = 0x0, keyfile = 0x0, keypass = 0x0}

I'll leave the VM up in case you want to suggest other avenues of inquiry.

Christian Grothoff

2022-03-19 07:50

manager   ~0018810

That's OK, I think I have what I need.

Christian Grothoff

2022-03-19 16:18

manager   ~0018814

Hmm. I cannot find it. Very strange. From what I can tell, the required cleanup _should_ have happened, but did not.
Is this a heisenbug, or does it always happen on the target system? So far, I've failed to reproduce this...

Christian Grothoff

2022-03-20 04:00

manager   ~0018820

Anyway, summary for now:
- what is crashing is the test, on otherwise successful exit
- during the clean up of the curl context, we notice a curl request is still active and assert on that.
- the curl request is for the auditor protocol version; unsure why it did not terminate (usually quick!)
- the test does not wait for that request, it is triggered when a deposit goes for probabilistic auditing
- the clean up is expected to be via exchange handle cleaning up auditor handles cleaning up auditor initialization including /version requests

So the main problem is: why does the request not get cleaned up on exit? Following the code by reading, it seems it should be!
I also looked at possibilities that we simply cleaned up the curl context before the exchange context. That does not seem to be the case. Alas, a backtrace might help to more firmly establish this.
Valgrind also did not suggest any leaks or memory corruptions for this test.

ttn

2022-03-23 04:55

developer   ~0018827

It's a heisenbug, unfortunately. I can reproduce it 80% of the time w/ the following sequence:

- make uninstall
- make clean
- ./configure --prefix ~/te CFLAGS='-g -O0'
- make
- make install
- make check

The other 20% of the time, the _cs and _rsa tests pass (or are SKIPped), and the failure manifests later w/ the walletharness.

ttn

2022-03-23 05:01

developer   ~0018828

I managed to grab a backtrace (this time, from the _cs core dump).
Attached.
bt (3,783 bytes)   
ttn@bub:~/build/GNU/T/merchant/src/testing$ gdb $(pwd)/.libs/test_merchant_api_rsa /var/lib/apport/coredump/core._home_ttn_build_GNU_T_merchant_src_testing__libs_test_merchant_api_cs.1000.a2930aa6-6c46-4e2e-8129-f6328d1ac594.19665.27507
GNU gdb (Ubuntu 9.2-0ubuntu1~20.04.1) 9.2
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /home/ttn/build/GNU/T/merchant/src/testing/.libs/test_merchant_api_rsa...

warning: core file may not match specified executable file.
[New LWP 19665]
[New LWP 19762]
[New LWP 19808]
[New LWP 19761]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `/home/ttn/build/GNU/T/merchant/src/testing/.libs/test_merchant_api_cs'.
Program terminated with signal SIGABRT, Aborted.
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
50	../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
[Current thread is 1 (Thread 0x7fb37335e5c0 (LWP 19665))]
(gdb) up
#1  0x00007fb374842859 in __GI_abort () at abort.c:79
79	abort.c: No such file or directory.
(gdb) up
#2  0x00007fb374a4d0db in GNUNET_abort_ () at common_logging.c:281
281	  abort ();
(gdb) up
#3  0x00007fb3746fcb65 in GNUNET_CURL_fini (ctx=0x557f9c103c80) at curl.c:819
819	  GNUNET_assert (NULL == ctx->jobs_head);
(gdb) bt
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
#1  0x00007fb374842859 in __GI_abort () at abort.c:79
#2  0x00007fb374a4d0db in GNUNET_abort_ () at common_logging.c:281
#3  0x00007fb3746fcb65 in GNUNET_CURL_fini (ctx=0x557f9c103c80) at curl.c:819
#4  0x00007fb374afd445 in authchange_cleanup (cls=0x557f9c125f60, cmd=0x557f9c132e70) at testing_api_cmd_change_auth.c:107
#5  0x00007fb374afca7f in batch_cleanup (cls=0x557f9c132c10, cmd=0x557f9c134de8) at testing_api_cmd_batch.c:100
#6  0x00007fb374b21216 in do_shutdown (cls=0x7fff829cdda0) at testing_api_loop.c:277
#7  0x00007fb374a9fa53 in GNUNET_SCHEDULER_do_work (sh=0x557f9c0fbbd0) at scheduler.c:2145
#8  0x00007fb374aa0794 in select_loop (sh=0x557f9c0fbbd0, context=0x7fff829cdd10) at scheduler.c:2442
#9  0x00007fb374a9b193 in GNUNET_SCHEDULER_run (task=0x7fb374b220cb <main_wrapper_exchange_connect>, task_cls=0x7fff829cdd80)
    at scheduler.c:738
#10 0x00007fb374b22b39 in TALER_TESTING_setup (main_cb=0x557f9a19b0f0 <run>, main_cb_cls=0x0, cfg=0x557f9c0fce90,
    exchanged=0x557f9c0f10f0, exchange_connect=1) at testing_api_loop.c:840
#11 0x00007fb374b1fe95 in TALER_TESTING_setup_with_exchange_cfg (cls=0x7fff829cdfb0, cfg=0x557f9c0fce90)
    at testing_api_helpers_exchange.c:819
#12 0x00007fb374a505db in GNUNET_CONFIGURATION_parse_and_run (filename=0x557f9c0fb110 "test_merchant_api-cs.conf",
    cb=0x7fb374b1f91d <TALER_TESTING_setup_with_exchange_cfg>, cb_cls=0x7fff829cdfb0) at configuration.c:349
#13 0x00007fb374b1f412 in TALER_TESTING_setup_with_exchange (main_cb=0x557f9a19b0f0 <run>, main_cb_cls=0x0,
    config_file=0x557f9c0fb110 "test_merchant_api-cs.conf") at testing_api_helpers_exchange.c:585
#14 0x0000557f9a19e9dd in main (argc=1, argv=0x7fff829ce0f8) at test_merchant_api.c:1692
bt (3,783 bytes)   

Christian Grothoff

2022-03-23 05:19

manager   ~0018829

Ah, there was a 2nd ctx object for changes in the authentication header. That disrupted the 'nice' sequence for the shutdown. Fixed in 6505f698..9b7716f9.

ttn

2022-03-23 06:08

developer   ~0018830

Reopening.
(Although the core dump no longer happens (in light testing), "make check" still fails on walletharness.sh.)

ttn

2022-03-23 06:12

developer   ~0018831

The test-suite.log mentions results.json, so that's attached as well.
test-suite.log-3.gz (3,961 bytes)
results.json (939 bytes)

ttn

2022-03-23 07:17

developer   ~0018832

I installed libmicrohttpd 0.9.75 under /usr/local, rebuilt, and the walletharness.sh still fails.

Christian Grothoff

2022-03-23 14:48

manager   ~0018836

I've run the tests several times locally now. No failures. From the logs: could it be that your bank(.git) is outdated?

ttn

2022-03-24 00:28

developer   ~0018837

I wasn't aware that it was necessary to build/install it for merchant "make check".
I see in the bank.git top-level README.md that the project is "deprecated" in favor of LibEuFin.
Maybe my LibEuFin installation is outdated...

ttn

2022-03-26 18:12

developer   ~0018840

I just rechecked src/testing/test-suite.log (attached), and realized that the taler-wallet-cli binary (in /usr/bin) is probably outdated.

@Florian Dold
When can the packages for Ubuntu be updated?
test-suite-3.log (37,741 bytes)   
======================================================
   taler-merchant 0.8.4: src/testing/test-suite.log
======================================================

# TOTAL: 10
# PASS:  3
# SKIP:  6
# XFAIL: 0
# FAIL:  1
# XPASS: 0
# ERROR: 0

.. contents:: :depth: 2

FAIL: test-merchant-walletharness.sh
====================================

2022-03-26T17:06:36.626Z taler-wallet-cli.ts TRACE running wallet-cli with [
  [
    "/usr/bin/node",
    "/usr/bin/taler-wallet-cli",
    "testing",
    "run-integrationtests",
    "--suites",
    "merchant"
  ]
]
testsuite root directory:  /home/ttn/te/tmp/taler-integrationtests-63w478
running merchant-exchange-confusion with timeout 60000ms
running test merchant-exchange-confusion in worker process
running test merchant-exchange-confusion
running test in directory /home/ttn/te/tmp/taler-integrationtests-63w478/merchant-exchange-confusion
running command taler-bank-manage -c '/home/ttn/te/tmp/taler-integrationtests-63w478/merchant-exchange-confusion/bank.conf' django migrate
child process exited (127 / null)
FATAL: test failed with exception Error: Unexpected exit code 127 for 'taler-bank-manage -c '/home/ttn/te/tmp/taler-integrationtests-63w478/merchant-exchange-confusion/bank.conf' django migrate'
    at ChildProcess.proc.on (/usr/share/taler-wallet-cli/node_modules/taler-wallet-cli/src/integrationtests/harness.ts:119:16)
    at ChildProcess.emit (events.js:198:13)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:248:12)
shutting down
test merchant-exchange-confusion finished in worker
process exited code=0 signal=null
parent: got result {"name":"merchant-exchange-confusion","timeSec":0.959,"status":"fail"}
running merchant-instances with timeout 60000ms
running test merchant-instances in worker process
running test merchant-instances
running test in directory /home/ttn/te/tmp/taler-integrationtests-63w478/merchant-instances
spawning process (merchant-testmerchant-1): taler-merchant-httpd -LDEBUG -c '/home/ttn/te/tmp/taler-integrationtests-63w478/merchant-instances/merchant-testmerchant-1.conf'
spawned process (merchant-testmerchant-1) with pid 38320
pinging merchant (testmerchant-1)
service merchant (testmerchant-1) not ready: Error: connect ECONNREFUSED 127.0.0.1:8083
pinging merchant (testmerchant-1)
service merchant (testmerchant-1) available
{ currency: 'TESTKUDOS',
  name: 'taler-merchant',
  version: '3:0:1' }
adding instance
adding instance
requesting instances with auth { method: 'external' }
{ Error: Request failed with status code 401
    at createError (/usr/share/taler-wallet-cli/node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/createError.js:16:15)
    at settle (/usr/share/taler-wallet-cli/node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/settle.js:17:12)
    at IncomingMessage.handleStreamEnd (/usr/share/taler-wallet-cli/node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/adapters/http.js:260:11)
    at IncomingMessage.emit (events.js:203:15)
    at endReadableNT (_stream_readable.js:1145:12)
    at process._tickCallback (internal/process/next_tick.js:63:19)
  config:
   { url: 'http://localhost:8083/management/instances',
     method: 'get',
     headers:
      { Accept: 'application/json, text/plain, */*',
        'User-Agent': 'axios/0.21.1' },
     transformRequest: [ [Function: transformRequest] ],
     transformResponse: [ [Function: transformResponse] ],
     timeout: 0,
     adapter: [Function: httpAdapter],
     xsrfCookieName: 'XSRF-TOKEN',
     xsrfHeaderName: 'X-XSRF-TOKEN',
     maxContentLength: -1,
     maxBodyLength: -1,
     validateStatus: [Function: validateStatus],
     data: undefined },
  request:
   ClientRequest {
     _events:
      [Object: null prototype] {
        socket: [Function],
        abort: [Function],
        aborted: [Function],
        connect: [Function],
        error: [Function],
        timeout: [Function],
        prefinish: [Function: requestOnPrefinish] },
     _eventsCount: 7,
     _maxListeners: undefined,
     output: [],
     outputEncodings: [],
     outputCallbacks: [],
     outputSize: 0,
     writable: true,
     _last: true,
     chunkedEncoding: false,
     shouldKeepAlive: false,
     useChunkedEncodingByDefault: false,
     sendDate: false,
     _removedConnection: false,
     _removedContLen: false,
     _removedTE: false,
     _contentLength: 0,
     _hasBody: true,
     _trailer: '',
     finished: true,
     _headerSent: true,
     socket:
      Socket {
        connecting: false,
        _hadError: false,
        _handle: [TCP],
        _parent: null,
        _host: 'localhost',
        _readableState: [ReadableState],
        readable: true,
        _events: [Object],
        _eventsCount: 7,
        _maxListeners: undefined,
        _writableState: [WritableState],
        writable: false,
        allowHalfOpen: false,
        _sockname: null,
        _pendingData: null,
        _pendingEncoding: '',
        server: null,
        _server: null,
        parser: null,
        _httpMessage: [Circular],
        [Symbol(asyncId)]: 332,
        [Symbol(lastWriteQueueSize)]: 0,
        [Symbol(timeout)]: null,
        [Symbol(kBytesRead)]: 0,
        [Symbol(kBytesWritten)]: 0 },
     connection:
      Socket {
        connecting: false,
        _hadError: false,
        _handle: [TCP],
        _parent: null,
        _host: 'localhost',
        _readableState: [ReadableState],
        readable: true,
        _events: [Object],
        _eventsCount: 7,
        _maxListeners: undefined,
        _writableState: [WritableState],
        writable: false,
        allowHalfOpen: false,
        _sockname: null,
        _pendingData: null,
        _pendingEncoding: '',
        server: null,
        _server: null,
        parser: null,
        _httpMessage: [Circular],
        [Symbol(asyncId)]: 332,
        [Symbol(lastWriteQueueSize)]: 0,
        [Symbol(timeout)]: null,
        [Symbol(kBytesRead)]: 0,
        [Symbol(kBytesWritten)]: 0 },
     _header:
      'GET /management/instances HTTP/1.1\r\nAccept: application/json, text/plain, */*\r\nUser-Agent: axios/0.21.1\r\nHost: localhost:8083\r\nConnection: close\r\n\r\n',
     _onPendingData: [Function: noopPendingOutput],
     agent:
      Agent {
        _events: [Object],
        _eventsCount: 1,
        _maxListeners: undefined,
        defaultPort: 80,
        protocol: 'http:',
        options: [Object],
        requests: {},
        sockets: [Object],
        freeSockets: {},
        keepAliveMsecs: 1000,
        keepAlive: false,
        maxSockets: Infinity,
        maxFreeSockets: 256 },
     socketPath: undefined,
     timeout: undefined,
     method: 'GET',
     insecureHTTPParser: undefined,
     path: '/management/instances',
     _ended: true,
     res:
      IncomingMessage {
        _readableState: [ReadableState],
        readable: false,
        _events: [Object],
        _eventsCount: 3,
        _maxListeners: undefined,
        socket: [Socket],
        connection: [Socket],
        httpVersionMajor: 1,
        httpVersionMinor: 1,
        httpVersion: '1.1',
        complete: true,
        headers: [Object],
        rawHeaders: [Array],
        trailers: {},
        rawTrailers: [],
        aborted: false,
        upgrade: false,
        url: '',
        method: null,
        statusCode: 401,
        statusMessage: 'Unauthorized',
        client: [Socket],
        _consuming: false,
        _dumped: false,
        req: [Circular],
        responseUrl: 'http://localhost:8083/management/instances',
        redirects: [] },
     aborted: undefined,
     timeoutCb: null,
     upgradeOrConnect: false,
     parser: null,
     maxHeadersCount: null,
     _redirectable:
      Writable {
        _writableState: [WritableState],
        writable: true,
        _events: [Object],
        _eventsCount: 2,
        _maxListeners: undefined,
        _options: [Object],
        _ended: true,
        _ending: true,
        _redirectCount: 0,
        _redirects: [],
        _requestBodyLength: 0,
        _requestBodyBuffers: [],
        _onNativeResponse: [Function],
        _currentRequest: [Circular],
        _currentUrl: 'http://localhost:8083/management/instances' },
     [Symbol(isCorked)]: false,
     [Symbol(outHeadersKey)]:
      [Object: null prototype] { accept: [Array], 'user-agent': [Array], host: [Array] } },
  response:
   { status: 401,
     statusText: 'Unauthorized',
     headers:
      { date: 'Sat, 26 Mar 2022 17:06:40 GMT',
        connection: 'close',
        'access-control-allow-origin': '*',
        'access-control-expose-headers': '*',
        'content-type': 'application/json',
        'content-length': '138' },
     config:
      { url: 'http://localhost:8083/management/instances',
        method: 'get',
        headers: [Object],
        transformRequest: [Array],
        transformResponse: [Array],
        timeout: 0,
        adapter: [Function: httpAdapter],
        xsrfCookieName: 'XSRF-TOKEN',
        xsrfHeaderName: 'X-XSRF-TOKEN',
        maxContentLength: -1,
        maxBodyLength: -1,
        validateStatus: [Function: validateStatus],
        data: undefined },
     request:
      ClientRequest {
        _events: [Object],
        _eventsCount: 7,
        _maxListeners: undefined,
        output: [],
        outputEncodings: [],
        outputCallbacks: [],
        outputSize: 0,
        writable: true,
        _last: true,
        chunkedEncoding: false,
        shouldKeepAlive: false,
        useChunkedEncodingByDefault: false,
        sendDate: false,
        _removedConnection: false,
        _removedContLen: false,
        _removedTE: false,
        _contentLength: 0,
        _hasBody: true,
        _trailer: '',
        finished: true,
        _headerSent: true,
        socket: [Socket],
        connection: [Socket],
        _header:
         'GET /management/instances HTTP/1.1\r\nAccept: application/json, text/plain, */*\r\nUser-Agent: axios/0.21.1\r\nHost: localhost:8083\r\nConnection: close\r\n\r\n',
        _onPendingData: [Function: noopPendingOutput],
        agent: [Agent],
        socketPath: undefined,
        timeout: undefined,
        method: 'GET',
        insecureHTTPParser: undefined,
        path: '/management/instances',
        _ended: true,
        res: [IncomingMessage],
        aborted: undefined,
        timeoutCb: null,
        upgradeOrConnect: false,
        parser: null,
        maxHeadersCount: null,
        _redirectable: [Writable],
        [Symbol(isCorked)]: false,
        [Symbol(outHeadersKey)]: [Object] },
     data:
      { code: 2015,
        hint:
         'The merchant refused the request due to lack of authorization.',
        detail: 'Check \'Authorization\' header' } },
  isAxiosError: true,
  toJSON: [Function: toJSON] }
{ Error: Request failed with status code 401
    at createError (/usr/share/taler-wallet-cli/node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/createError.js:16:15)
    at settle (/usr/share/taler-wallet-cli/node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/settle.js:17:12)
    at IncomingMessage.handleStreamEnd (/usr/share/taler-wallet-cli/node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/adapters/http.js:260:11)
    at IncomingMessage.emit (events.js:203:15)
    at endReadableNT (_stream_readable.js:1145:12)
    at process._tickCallback (internal/process/next_tick.js:63:19)
  config:
   { url: 'http://localhost:8083/management/instances/myinst',
     method: 'delete',
     headers:
      { Accept: 'application/json, text/plain, */*',
        'User-Agent': 'axios/0.21.1' },
     transformRequest: [ [Function: transformRequest] ],
     transformResponse: [ [Function: transformResponse] ],
     timeout: 0,
     adapter: [Function: httpAdapter],
     xsrfCookieName: 'XSRF-TOKEN',
     xsrfHeaderName: 'X-XSRF-TOKEN',
     maxContentLength: -1,
     maxBodyLength: -1,
     validateStatus: [Function: validateStatus],
     data: undefined },
  request:
   ClientRequest {
     _events:
      [Object: null prototype] {
        socket: [Function],
        abort: [Function],
        aborted: [Function],
        connect: [Function],
        error: [Function],
        timeout: [Function],
        prefinish: [Function: requestOnPrefinish] },
     _eventsCount: 7,
     _maxListeners: undefined,
     output: [],
     outputEncodings: [],
     outputCallbacks: [],
     outputSize: 0,
     writable: true,
     _last: true,
     chunkedEncoding: false,
     shouldKeepAlive: false,
     useChunkedEncodingByDefault: false,
     sendDate: false,
     _removedConnection: false,
     _removedContLen: false,
     _removedTE: false,
     _contentLength: 0,
     _hasBody: true,
     _trailer: '',
     finished: true,
     _headerSent: true,
     socket:
      Socket {
        connecting: false,
        _hadError: false,
        _handle: [TCP],
        _parent: null,
        _host: 'localhost',
        _readableState: [ReadableState],
        readable: true,
        _events: [Object],
        _eventsCount: 7,
        _maxListeners: undefined,
        _writableState: [WritableState],
        writable: false,
        allowHalfOpen: false,
        _sockname: null,
        _pendingData: null,
        _pendingEncoding: '',
        server: null,
        _server: null,
        parser: null,
        _httpMessage: [Circular],
        [Symbol(asyncId)]: 418,
        [Symbol(lastWriteQueueSize)]: 0,
        [Symbol(timeout)]: null,
        [Symbol(kBytesRead)]: 0,
        [Symbol(kBytesWritten)]: 0 },
     connection:
      Socket {
        connecting: false,
        _hadError: false,
        _handle: [TCP],
        _parent: null,
        _host: 'localhost',
        _readableState: [ReadableState],
        readable: true,
        _events: [Object],
        _eventsCount: 7,
        _maxListeners: undefined,
        _writableState: [WritableState],
        writable: false,
        allowHalfOpen: false,
        _sockname: null,
        _pendingData: null,
        _pendingEncoding: '',
        server: null,
        _server: null,
        parser: null,
        _httpMessage: [Circular],
        [Symbol(asyncId)]: 418,
        [Symbol(lastWriteQueueSize)]: 0,
        [Symbol(timeout)]: null,
        [Symbol(kBytesRead)]: 0,
        [Symbol(kBytesWritten)]: 0 },
     _header:
      'DELETE /management/instances/myinst HTTP/1.1\r\nAccept: application/json, text/plain, */*\r\nUser-Agent: axios/0.21.1\r\nHost: localhost:8083\r\nConnection: close\r\n\r\n',
     _onPendingData: [Function: noopPendingOutput],
     agent:
      Agent {
        _events: [Object],
        _eventsCount: 1,
        _maxListeners: undefined,
        defaultPort: 80,
        protocol: 'http:',
        options: [Object],
        requests: {},
        sockets: [Object],
        freeSockets: {},
        keepAliveMsecs: 1000,
        keepAlive: false,
        maxSockets: Infinity,
        maxFreeSockets: 256 },
     socketPath: undefined,
     timeout: undefined,
     method: 'DELETE',
     insecureHTTPParser: undefined,
     path: '/management/instances/myinst',
     _ended: true,
     res:
      IncomingMessage {
        _readableState: [ReadableState],
        readable: false,
        _events: [Object],
        _eventsCount: 3,
        _maxListeners: undefined,
        socket: [Socket],
        connection: [Socket],
        httpVersionMajor: 1,
        httpVersionMinor: 1,
        httpVersion: '1.1',
        complete: true,
        headers: [Object],
        rawHeaders: [Array],
        trailers: {},
        rawTrailers: [],
        aborted: false,
        upgrade: false,
        url: '',
        method: null,
        statusCode: 401,
        statusMessage: 'Unauthorized',
        client: [Socket],
        _consuming: false,
        _dumped: false,
        req: [Circular],
        responseUrl: 'http://localhost:8083/management/instances/myinst',
        redirects: [] },
     aborted: undefined,
     timeoutCb: null,
     upgradeOrConnect: false,
     parser: null,
     maxHeadersCount: null,
     _redirectable:
      Writable {
        _writableState: [WritableState],
        writable: true,
        _events: [Object],
        _eventsCount: 2,
        _maxListeners: undefined,
        _options: [Object],
        _ended: true,
        _ending: true,
        _redirectCount: 0,
        _redirects: [],
        _requestBodyLength: 0,
        _requestBodyBuffers: [],
        _onNativeResponse: [Function],
        _currentRequest: [Circular],
        _currentUrl: 'http://localhost:8083/management/instances/myinst' },
     [Symbol(isCorked)]: false,
     [Symbol(outHeadersKey)]:
      [Object: null prototype] { accept: [Array], 'user-agent': [Array], host: [Array] } },
  response:
   { status: 401,
     statusText: 'Unauthorized',
     headers:
      { date: 'Sat, 26 Mar 2022 17:06:41 GMT',
        connection: 'close',
        'access-control-allow-origin': '*',
        'access-control-expose-headers': '*',
        'content-type': 'application/json',
        'content-length': '138' },
     config:
      { url: 'http://localhost:8083/management/instances/myinst',
        method: 'delete',
        headers: [Object],
        transformRequest: [Array],
        transformResponse: [Array],
        timeout: 0,
        adapter: [Function: httpAdapter],
        xsrfCookieName: 'XSRF-TOKEN',
        xsrfHeaderName: 'X-XSRF-TOKEN',
        maxContentLength: -1,
        maxBodyLength: -1,
        validateStatus: [Function: validateStatus],
        data: undefined },
     request:
      ClientRequest {
        _events: [Object],
        _eventsCount: 7,
        _maxListeners: undefined,
        output: [],
        outputEncodings: [],
        outputCallbacks: [],
        outputSize: 0,
        writable: true,
        _last: true,
        chunkedEncoding: false,
        shouldKeepAlive: false,
        useChunkedEncodingByDefault: false,
        sendDate: false,
        _removedConnection: false,
        _removedContLen: false,
        _removedTE: false,
        _contentLength: 0,
        _hasBody: true,
        _trailer: '',
        finished: true,
        _headerSent: true,
        socket: [Socket],
        connection: [Socket],
        _header:
         'DELETE /management/instances/myinst HTTP/1.1\r\nAccept: application/json, text/plain, */*\r\nUser-Agent: axios/0.21.1\r\nHost: localhost:8083\r\nConnection: close\r\n\r\n',
        _onPendingData: [Function: noopPendingOutput],
        agent: [Agent],
        socketPath: undefined,
        timeout: undefined,
        method: 'DELETE',
        insecureHTTPParser: undefined,
        path: '/management/instances/myinst',
        _ended: true,
        res: [IncomingMessage],
        aborted: undefined,
        timeoutCb: null,
        upgradeOrConnect: false,
        parser: null,
        maxHeadersCount: null,
        _redirectable: [Writable],
        [Symbol(isCorked)]: false,
        [Symbol(outHeadersKey)]: [Object] },
     data:
      { code: 2015,
        hint:
         'The merchant refused the request due to lack of authorization.',
        detail: 'Check \'Authorization\' header' } },
  isAxiosError: true,
  toJSON: [Function: toJSON] }
shutting down
killing process 38320
process merchant-testmerchant-1 exited
test merchant-instances finished in worker
process exited code=0 signal=null
parent: got result {"name":"merchant-instances","timeSec":2.618,"status":"pass"}
running merchant-instances-delete with timeout 60000ms
running test merchant-instances-delete in worker process
running test merchant-instances-delete
running test in directory /home/ttn/te/tmp/taler-integrationtests-63w478/merchant-instances-delete
spawning process (merchant-testmerchant-1): taler-merchant-httpd -LDEBUG -c '/home/ttn/te/tmp/taler-integrationtests-63w478/merchant-instances-delete/merchant-testmerchant-1.conf'
spawned process (merchant-testmerchant-1) with pid 38379
pinging merchant (testmerchant-1)
service merchant (testmerchant-1) not ready: Error: connect ECONNREFUSED 127.0.0.1:8083
pinging merchant (testmerchant-1)
service merchant (testmerchant-1) available
{ currency: 'TESTKUDOS',
  name: 'taler-merchant',
  version: '3:0:1' }
adding instance
adding instance
Got expected exception { Error: Request failed with status code 401
    at createError (/usr/share/taler-wallet-cli/node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/createError.js:16:15)
    at settle (/usr/share/taler-wallet-cli/node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/settle.js:17:12)
    at IncomingMessage.handleStreamEnd (/usr/share/taler-wallet-cli/node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/adapters/http.js:260:11)
    at IncomingMessage.emit (events.js:203:15)
    at endReadableNT (_stream_readable.js:1145:12)
    at process._tickCallback (internal/process/next_tick.js:63:19)
  config:
   { url: 'http://localhost:8083/management/instances/myinst',
     method: 'delete',
     headers:
      { Accept: 'application/json, text/plain, */*',
        Authorization: 'Bearer secret-token:invalid',
        'User-Agent': 'axios/0.21.1' },
     transformRequest: [ [Function: transformRequest] ],
     transformResponse: [ [Function: transformResponse] ],
     timeout: 0,
     adapter: [Function: httpAdapter],
     xsrfCookieName: 'XSRF-TOKEN',
     xsrfHeaderName: 'X-XSRF-TOKEN',
     maxContentLength: -1,
     maxBodyLength: -1,
     validateStatus: [Function: validateStatus],
     data: undefined },
  request:
   ClientRequest {
     _events:
      [Object: null prototype] {
        socket: [Function],
        abort: [Function],
        aborted: [Function],
        connect: [Function],
        error: [Function],
        timeout: [Function],
        prefinish: [Function: requestOnPrefinish] },
     _eventsCount: 7,
     _maxListeners: undefined,
     output: [],
     outputEncodings: [],
     outputCallbacks: [],
     outputSize: 0,
     writable: true,
     _last: true,
     chunkedEncoding: false,
     shouldKeepAlive: false,
     useChunkedEncodingByDefault: false,
     sendDate: false,
     _removedConnection: false,
     _removedContLen: false,
     _removedTE: false,
     _contentLength: 0,
     _hasBody: true,
     _trailer: '',
     finished: true,
     _headerSent: true,
     socket:
      Socket {
        connecting: false,
        _hadError: false,
        _handle: [TCP],
        _parent: null,
        _host: 'localhost',
        _readableState: [ReadableState],
        readable: true,
        _events: [Object],
        _eventsCount: 7,
        _maxListeners: undefined,
        _writableState: [WritableState],
        writable: false,
        allowHalfOpen: false,
        _sockname: null,
        _pendingData: null,
        _pendingEncoding: '',
        server: null,
        _server: null,
        parser: null,
        _httpMessage: [Circular],
        [Symbol(asyncId)]: 266,
        [Symbol(lastWriteQueueSize)]: 0,
        [Symbol(timeout)]: null,
        [Symbol(kBytesRead)]: 0,
        [Symbol(kBytesWritten)]: 0 },
     connection:
      Socket {
        connecting: false,
        _hadError: false,
        _handle: [TCP],
        _parent: null,
        _host: 'localhost',
        _readableState: [ReadableState],
        readable: true,
        _events: [Object],
        _eventsCount: 7,
        _maxListeners: undefined,
        _writableState: [WritableState],
        writable: false,
        allowHalfOpen: false,
        _sockname: null,
        _pendingData: null,
        _pendingEncoding: '',
        server: null,
        _server: null,
        parser: null,
        _httpMessage: [Circular],
        [Symbol(asyncId)]: 266,
        [Symbol(lastWriteQueueSize)]: 0,
        [Symbol(timeout)]: null,
        [Symbol(kBytesRead)]: 0,
        [Symbol(kBytesWritten)]: 0 },
     _header:
      'DELETE /management/instances/myinst HTTP/1.1\r\nAccept: application/json, text/plain, */*\r\nAuthorization: Bearer secret-token:invalid\r\nUser-Agent: axios/0.21.1\r\nHost: localhost:8083\r\nConnection: close\r\n\r\n',
     _onPendingData: [Function: noopPendingOutput],
     agent:
      Agent {
        _events: [Object],
        _eventsCount: 1,
        _maxListeners: undefined,
        defaultPort: 80,
        protocol: 'http:',
        options: [Object],
        requests: {},
        sockets: [Object],
        freeSockets: {},
        keepAliveMsecs: 1000,
        keepAlive: false,
        maxSockets: Infinity,
        maxFreeSockets: 256 },
     socketPath: undefined,
     timeout: undefined,
     method: 'DELETE',
     insecureHTTPParser: undefined,
     path: '/management/instances/myinst',
     _ended: true,
     res:
      IncomingMessage {
        _readableState: [ReadableState],
        readable: false,
        _events: [Object],
        _eventsCount: 3,
        _maxListeners: undefined,
        socket: [Socket],
        connection: [Socket],
        httpVersionMajor: 1,
        httpVersionMinor: 1,
        httpVersion: '1.1',
        complete: true,
        headers: [Object],
        rawHeaders: [Array],
        trailers: {},
        rawTrailers: [],
        aborted: false,
        upgrade: false,
        url: '',
        method: null,
        statusCode: 401,
        statusMessage: 'Unauthorized',
        client: [Socket],
        _consuming: false,
        _dumped: false,
        req: [Circular],
        responseUrl: 'http://localhost:8083/management/instances/myinst',
        redirects: [] },
     aborted: undefined,
     timeoutCb: null,
     upgradeOrConnect: false,
     parser: null,
     maxHeadersCount: null,
     _redirectable:
      Writable {
        _writableState: [WritableState],
        writable: true,
        _events: [Object],
        _eventsCount: 2,
        _maxListeners: undefined,
        _options: [Object],
        _ended: true,
        _ending: true,
        _redirectCount: 0,
        _redirects: [],
        _requestBodyLength: 0,
        _requestBodyBuffers: [],
        _onNativeResponse: [Function],
        _currentRequest: [Circular],
        _currentUrl: 'http://localhost:8083/management/instances/myinst' },
     [Symbol(isCorked)]: false,
     [Symbol(outHeadersKey)]:
      [Object: null prototype] {
        accept: [Array],
        authorization: [Array],
        'user-agent': [Array],
        host: [Array] } },
  response:
   { status: 401,
     statusText: 'Unauthorized',
     headers:
      { date: 'Sat, 26 Mar 2022 17:06:43 GMT',
        connection: 'close',
        'access-control-allow-origin': '*',
        'access-control-expose-headers': '*',
        'content-type': 'application/json',
        'content-length': '138' },
     config:
      { url: 'http://localhost:8083/management/instances/myinst',
        method: 'delete',
        headers: [Object],
        transformRequest: [Array],
        transformResponse: [Array],
        timeout: 0,
        adapter: [Function: httpAdapter],
        xsrfCookieName: 'XSRF-TOKEN',
        xsrfHeaderName: 'X-XSRF-TOKEN',
        maxContentLength: -1,
        maxBodyLength: -1,
        validateStatus: [Function: validateStatus],
        data: undefined },
     request:
      ClientRequest {
        _events: [Object],
        _eventsCount: 7,
        _maxListeners: undefined,
        output: [],
        outputEncodings: [],
        outputCallbacks: [],
        outputSize: 0,
        writable: true,
        _last: true,
        chunkedEncoding: false,
        shouldKeepAlive: false,
        useChunkedEncodingByDefault: false,
        sendDate: false,
        _removedConnection: false,
        _removedContLen: false,
        _removedTE: false,
        _contentLength: 0,
        _hasBody: true,
        _trailer: '',
        finished: true,
        _headerSent: true,
        socket: [Socket],
        connection: [Socket],
        _header:
         'DELETE /management/instances/myinst HTTP/1.1\r\nAccept: application/json, text/plain, */*\r\nAuthorization: Bearer secret-token:invalid\r\nUser-Agent: axios/0.21.1\r\nHost: localhost:8083\r\nConnection: close\r\n\r\n',
        _onPendingData: [Function: noopPendingOutput],
        agent: [Agent],
        socketPath: undefined,
        timeout: undefined,
        method: 'DELETE',
        insecureHTTPParser: undefined,
        path: '/management/instances/myinst',
        _ended: true,
        res: [IncomingMessage],
        aborted: undefined,
        timeoutCb: null,
        upgradeOrConnect: false,
        parser: null,
        maxHeadersCount: null,
        _redirectable: [Writable],
        [Symbol(isCorked)]: false,
        [Symbol(outHeadersKey)]: [Object] },
     data:
      { code: 2015,
        hint:
         'The merchant refused the request due to lack of authorization.',
        detail: 'Check \'Authorization\' header' } },
  isAxiosError: true,
  toJSON: [Function: toJSON] }
shutting down
killing process 38379
process merchant-testmerchant-1 exited
test merchant-instances-delete finished in worker
process exited code=0 signal=null
parent: got result {"name":"merchant-instances-delete","timeSec":2.591,"status":"pass"}
running merchant-instances-urls with timeout 60000ms
running test merchant-instances-urls in worker process
running test merchant-instances-urls
running test in directory /home/ttn/te/tmp/taler-integrationtests-63w478/merchant-instances-urls
spawning process (merchant-testmerchant-1): taler-merchant-httpd -LDEBUG -c '/home/ttn/te/tmp/taler-integrationtests-63w478/merchant-instances-urls/merchant-testmerchant-1.conf'
spawned process (merchant-testmerchant-1) with pid 38438
pinging merchant (testmerchant-1)
service merchant (testmerchant-1) not ready: Error: connect ECONNREFUSED 127.0.0.1:8083
pinging merchant (testmerchant-1)
service merchant (testmerchant-1) available
checking http://localhost:8083/private/instances/default/instances/default/config, expected 404, got 404
checking http://localhost:8083/instances/default/private/instances, expected 404, got 404
checking http://localhost:8083/instances/foo/private/instances, expected 404, got 404
checking http://localhost:8083/instances/myinst/private/instances, expected 404, got 404
checking http://localhost:8083/config, expected 200, got 200
checking http://localhost:8083/instances/default/config, expected 200, got 200
checking http://localhost:8083/instances/myinst/config, expected 200, got 200
checking http://localhost:8083/instances/foo/config, expected 404, got 404
checking http://localhost:8083/instances/default/instances/config, expected 404, got 404
checking http://localhost:8083/private/instances/myinst/config, expected 404, got 404
checking http://localhost:8083/instances/myinst/private/orders, expected 401, got 401
checking http://localhost:8083/instances/myinst/private/orders, expected 401, got 401
checking http://localhost:8083/instances/myinst/private/orders, expected 200, got 200
checking http://localhost:8083/private/instances/myinst/orders, expected 404, got 404
shutting down
killing process 38438
process merchant-testmerchant-1 exited
test merchant-instances-urls finished in worker
process exited code=0 signal=null
parent: got result {"name":"merchant-instances-urls","timeSec":2.061,"status":"pass"}
running merchant-longpolling with timeout 60000ms
running test merchant-longpolling in worker process
running test merchant-longpolling
running test in directory /home/ttn/te/tmp/taler-integrationtests-63w478/merchant-longpolling
running command taler-bank-manage -c '/home/ttn/te/tmp/taler-integrationtests-63w478/merchant-longpolling/bank.conf' django migrate
child process exited (127 / null)
FATAL: test failed with exception Error: Unexpected exit code 127 for 'taler-bank-manage -c '/home/ttn/te/tmp/taler-integrationtests-63w478/merchant-longpolling/bank.conf' django migrate'
    at ChildProcess.proc.on (/usr/share/taler-wallet-cli/node_modules/taler-wallet-cli/src/integrationtests/harness.ts:119:16)
    at ChildProcess.emit (events.js:198:13)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:248:12)
shutting down
test merchant-longpolling finished in worker
process exited code=0 signal=null
parent: got result {"name":"merchant-longpolling","timeSec":0.725,"status":"fail"}
running merchant-spec-public-orders with timeout 60000ms
running test merchant-spec-public-orders in worker process
running test merchant-spec-public-orders
running test in directory /home/ttn/te/tmp/taler-integrationtests-63w478/merchant-spec-public-orders
running command taler-bank-manage -c '/home/ttn/te/tmp/taler-integrationtests-63w478/merchant-spec-public-orders/bank.conf' django migrate
child process exited (127 / null)
FATAL: test failed with exception Error: Unexpected exit code 127 for 'taler-bank-manage -c '/home/ttn/te/tmp/taler-integrationtests-63w478/merchant-spec-public-orders/bank.conf' django migrate'
    at ChildProcess.proc.on (/usr/share/taler-wallet-cli/node_modules/taler-wallet-cli/src/integrationtests/harness.ts:119:16)
    at ChildProcess.emit (events.js:198:13)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:248:12)
shutting down
test merchant-spec-public-orders finished in worker
process exited code=0 signal=null
parent: got result {"name":"merchant-spec-public-orders","timeSec":0.755,"status":"fail"}
running merchant-refund-api with timeout 60000ms
running test merchant-refund-api in worker process
running test merchant-refund-api
running test in directory /home/ttn/te/tmp/taler-integrationtests-63w478/merchant-refund-api
running command taler-bank-manage -c '/home/ttn/te/tmp/taler-integrationtests-63w478/merchant-refund-api/bank.conf' django migrate
child process exited (127 / null)
FATAL: test failed with exception Error: Unexpected exit code 127 for 'taler-bank-manage -c '/home/ttn/te/tmp/taler-integrationtests-63w478/merchant-refund-api/bank.conf' django migrate'
    at ChildProcess.proc.on (/usr/share/taler-wallet-cli/node_modules/taler-wallet-cli/src/integrationtests/harness.ts:119:16)
    at ChildProcess.emit (events.js:198:13)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:248:12)
shutting down
test merchant-refund-api finished in worker
process exited code=0 signal=null
parent: got result {"name":"merchant-refund-api","timeSec":0.615,"status":"fail"}
running payment-forgettable with timeout 60000ms
running test payment-forgettable in worker process
running test payment-forgettable
running test in directory /home/ttn/te/tmp/taler-integrationtests-63w478/payment-forgettable
running command taler-bank-manage -c '/home/ttn/te/tmp/taler-integrationtests-63w478/payment-forgettable/bank.conf' django migrate
child process exited (127 / null)
FATAL: test failed with exception Error: Unexpected exit code 127 for 'taler-bank-manage -c '/home/ttn/te/tmp/taler-integrationtests-63w478/payment-forgettable/bank.conf' django migrate'
    at ChildProcess.proc.on (/usr/share/taler-wallet-cli/node_modules/taler-wallet-cli/src/integrationtests/harness.ts:119:16)
    at ChildProcess.emit (events.js:198:13)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:248:12)
shutting down
test payment-forgettable finished in worker
process exited code=0 signal=null
parent: got result {"name":"payment-forgettable","timeSec":0.602,"status":"fail"}
running paywall-flow with timeout 60000ms
running test paywall-flow in worker process
running test paywall-flow
running test in directory /home/ttn/te/tmp/taler-integrationtests-63w478/paywall-flow
running command taler-bank-manage -c '/home/ttn/te/tmp/taler-integrationtests-63w478/paywall-flow/bank.conf' django migrate
child process exited (127 / null)
FATAL: test failed with exception Error: Unexpected exit code 127 for 'taler-bank-manage -c '/home/ttn/te/tmp/taler-integrationtests-63w478/paywall-flow/bank.conf' django migrate'
    at ChildProcess.proc.on (/usr/share/taler-wallet-cli/node_modules/taler-wallet-cli/src/integrationtests/harness.ts:119:16)
    at ChildProcess.emit (events.js:198:13)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:248:12)
shutting down
test paywall-flow finished in worker
process exited code=0 signal=null
parent: got result {"name":"paywall-flow","timeSec":0.648,"status":"fail"}
See /home/ttn/te/tmp/taler-integrationtests-63w478/results.json for details
Skipped: 0/9
Failed: 6/9
Passed: 3/9
FAIL test-merchant-walletharness.sh (exit status: 1)

SKIP: test_merchant_instance_response.sh
========================================

Testing for jqinitialize_taler_system.sh: line 64: jq: command not found
 SKIP: jq required
SKIP test_merchant_instance_response.sh (exit status: 77)

SKIP: test_merchant_product_creation.sh
=======================================

Testing for jqinitialize_taler_system.sh: line 64: jq: command not found
 SKIP: jq required
SKIP test_merchant_product_creation.sh (exit status: 77)

SKIP: test_merchant_reserve_creation.sh
=======================================

Testing for jqinitialize_taler_system.sh: line 64: jq: command not found
 SKIP: jq required
SKIP test_merchant_reserve_creation.sh (exit status: 77)

SKIP: test_merchant_order_creation.sh
=====================================

Testing for jqinitialize_taler_system.sh: line 64: jq: command not found
 SKIP: jq required
SKIP test_merchant_order_creation.sh (exit status: 77)

SKIP: test_merchant_instance_purge.sh
=====================================

Testing for jqinitialize_taler_system.sh: line 64: jq: command not found
 SKIP: jq required
SKIP test_merchant_instance_purge.sh (exit status: 77)

SKIP: test_merchant_transfer_tracking.sh
========================================

Testing for jqinitialize_taler_system.sh: line 64: jq: command not found
 SKIP: jq required
SKIP test_merchant_transfer_tracking.sh (exit status: 77)

test-suite-3.log (37,741 bytes)   

ttn

2022-03-26 18:47

developer   ~0018841

Oh, now i realize that taler-wallet-cli is a wrapper around a javascript program that eventually calls taler-bank-manage.
Are the bank.git executables packaged in a way that i can "apt install" them?

Christian Grothoff

2022-04-23 20:19

manager   ~0018894

No. You need to checkout the bank.git. But anyway: we plan to replace bank.git with libeufin.git "soon".

ttn

2022-06-26 19:26

developer   ~0018939

The test now passes.
Closing.

Issue History

Date Modified Username Field Change
2022-01-20 11:11 ttn New Issue
2022-01-20 11:11 ttn Status new => assigned
2022-01-20 11:11 ttn Assigned To => Christian Grothoff
2022-01-20 11:11 ttn File Added: test-suite.log
2022-01-20 11:30 ttn Note Added: 0018647
2022-01-25 05:28 ttn Note Added: 0018665
2022-01-25 05:28 ttn File Added: test-suite.log.gz
2022-02-13 17:57 Christian Grothoff Assigned To Christian Grothoff => Florian Dold
2022-03-03 00:24 ttn Note Added: 0018762
2022-03-03 00:24 ttn File Added: test-suite-2.log
2022-03-18 06:43 ttn Note Added: 0018805
2022-03-18 06:43 ttn File Added: .ttn.merchant-make-check.log
2022-03-18 06:43 ttn File Added: test-suite.log-2.gz
2022-03-18 16:18 Christian Grothoff Note Added: 0018806
2022-03-18 20:56 ttn Note Added: 0018807
2022-03-19 00:38 Christian Grothoff Note Added: 0018808
2022-03-19 06:24 ttn Relationship added related to 0007200
2022-03-19 07:38 ttn Note Added: 0018809
2022-03-19 07:50 Christian Grothoff Note Added: 0018810
2022-03-19 16:18 Christian Grothoff Note Added: 0018814
2022-03-20 04:00 Christian Grothoff Note Added: 0018820
2022-03-23 04:55 ttn Note Added: 0018827
2022-03-23 05:01 ttn Note Added: 0018828
2022-03-23 05:01 ttn File Added: bt
2022-03-23 05:19 Christian Grothoff Note Added: 0018829
2022-03-23 05:20 Christian Grothoff Assigned To Florian Dold => Christian Grothoff
2022-03-23 05:20 Christian Grothoff Status assigned => resolved
2022-03-23 05:20 Christian Grothoff Resolution open => fixed
2022-03-23 05:20 Christian Grothoff Fixed in Version => 0.9
2022-03-23 05:20 Christian Grothoff Target Version => 0.9
2022-03-23 06:08 ttn Status resolved => feedback
2022-03-23 06:08 ttn Resolution fixed => reopened
2022-03-23 06:08 ttn Note Added: 0018830
2022-03-23 06:12 ttn Note Added: 0018831
2022-03-23 06:12 ttn File Added: test-suite.log-3.gz
2022-03-23 06:12 ttn File Added: results.json
2022-03-23 06:12 ttn Status feedback => assigned
2022-03-23 07:17 ttn Note Added: 0018832
2022-03-23 14:48 Christian Grothoff Note Added: 0018836
2022-03-24 00:28 ttn Note Added: 0018837
2022-03-26 18:12 ttn Note Added: 0018840
2022-03-26 18:12 ttn File Added: test-suite-3.log
2022-03-26 18:47 ttn Note Added: 0018841
2022-03-26 19:13 ttn Relationship added child of 0007208
2022-04-23 20:19 Christian Grothoff Note Added: 0018894
2022-06-26 19:26 ttn Status assigned => resolved
2022-06-26 19:26 ttn Note Added: 0018939
2022-11-04 20:53 Christian Grothoff Status resolved => closed