html 蛋白杏仁饼干兼容性失败

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了html 蛋白杏仁饼干兼容性失败相关的知识,希望对你有一定的参考价值。

<!DOCTYPE html><html>
  <head>
    <meta charset="utf-8"/>
    <title>Test Report</title>
    <style>body {
	font-family: Helvetica, Arial, sans-serif;
	font-size: 12px;
	min-width: 1200px;
	color: #999;
}
h2 {
	font-size: 16px;
	color: black;
}

p {
    color: black;
}

a {
	color: #999;
}

table {
	border-collapse: collapse;
}

/******************************
 * SUMMARY INFORMATION
 ******************************/

#environment td {
	padding: 5px;
	border: 1px solid #E6E6E6;
}

#environment tr:nth-child(odd) {
	background-color: #f6f6f6;
}

/******************************
 * TEST RESULT COLORS
 ******************************/
span.passed, .passed .col-result {
	color: green;
}
span.skipped, span.xfailed, .skipped .col-result, .xfailed .col-result {
	color: orange;
}
span.error, span.failed, span.xpassed, .failed .col-result, .xpassed .col-result  {
	color: red;
}


/******************************
 * RESULTS TABLE
 *
 * 1. Table Layout
 * 2. Extra
 * 3. Sorting items
 *
 ******************************/

/*------------------
 * 1. Table Layout
 *------------------*/

#results-table {
	border: 1px solid #e6e6e6;
	color: #999;
	font-size: 12px;
	width: 100%
}

#results-table th, #results-table td {
	padding: 5px;
	border: 1px solid #E6E6E6;
	text-align: left
}
#results-table th {
	font-weight: bold
}

/*------------------
 * 2. Extra
 *------------------*/

.log:only-child {
	height: inherit
}
.log {
	background-color: #e6e6e6;
	border: 1px solid #e6e6e6;
	color: black;
	display: block;
	font-family: "Courier New", Courier, monospace;
	height: 230px;
	overflow-y: scroll;
	padding: 5px;
	white-space: pre-wrap
}
div.image {
	border: 1px solid #e6e6e6;
	float: right;
	height: 240px;
	margin-left: 5px;
	overflow: hidden;
	width: 320px
}
div.image img {
	width: 320px
}

/*------------------
 * 3. Sorting items
 *------------------*/
.sortable {
	cursor: pointer;
}

.sort-icon {
	font-size: 0px;
	float: left;
	margin-right: 5px;
	margin-top: 5px;
	/*triangle*/
	width: 0;
	height: 0;
	border-left: 8px solid transparent;
	border-right: 8px solid transparent;
}

.inactive .sort-icon {
	/*finish triangle*/
	border-top: 8px solid #E6E6E6;
}

.asc.active .sort-icon {
	/*finish triangle*/
	border-bottom: 8px solid #999;
}

.desc.active .sort-icon {
	/*finish triangle*/
	border-top: 8px solid #999;
}
</style></head>
  <body>
    <script>/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
 * You can obtain one at http://mozilla.org/MPL/2.0/. */

function toArray(iter) {
    if (iter === null) {
        return null;
    }
    return Array.prototype.slice.call(iter);
}

function find(selector, elem) {
    if (!elem) {
        elem = document;
    }
    return elem.querySelector(selector);
}

function find_all(selector, elem) {
    if (!elem) {
        elem = document;
    }
    return toArray(elem.querySelectorAll(selector));
}

function sort_column(elem) {
    toggle_sort_states(elem);
    var colIndex = toArray(elem.parentNode.childNodes).indexOf(elem);
    var key;
    if (elem.classList.contains('numeric')) {
        key = key_num;
    } else if (elem.classList.contains('result')) {
        key = key_result;
    } else {
        key = key_alpha;
    }
    sort_table(elem, key(colIndex));
}

addEventListener("DOMContentLoaded", function() {
    reset_sort_headers();

    split_extra_onto_two_rows();
    sort_column(find('.initial-sort'));

    find_all('.col-links a.image').forEach(function(elem) {
        elem.addEventListener("click",
                              function(event) {
                                  var node = elem;
                                  while (node && !node.classList.contains('results-table-row')) {
                                      node = node.parentNode;
                                  }
                                  if (node != null) {
                                      if (node.nextSibling &&
                                          node.nextSibling.classList.contains("extra")) {
                                          var href = find('.image img', node.nextSibling).src;
                                          window.open(href);
                                      }
                                  }
                                  event.preventDefault();
                              }, false)
    });

    find_all('.image a').forEach(function(elem) {
        elem.addEventListener("click",
                              function(event) {
                                  window.open(find('img', elem).getAttribute('src'));
                                  event.preventDefault();
                              }, false)
    });

    find_all('.sortable').forEach(function(elem) {
        elem.addEventListener("click",
                              function(event) {
                                  sort_column(elem);
                              }, false)
    });

});

function sort_table(clicked, key_func) {
    one_row_for_data();
    var rows = find_all('.results-table-row');
    var reversed = !clicked.classList.contains('asc');

    var sorted_rows = sort(rows, key_func, reversed);

    var parent = document.getElementById('results-table-body');
    sorted_rows.forEach(function(elem) {
        parent.appendChild(elem);
    });

    split_extra_onto_two_rows();
}

function sort(items, key_func, reversed) {
    var sort_array = items.map(function(item, i) {
        return [key_func(item), i];
    });
    var multiplier = reversed ? -1 : 1;

    sort_array.sort(function(a, b) {
        var key_a = a[0];
        var key_b = b[0];
        return multiplier * (key_a >= key_b ? 1 : -1);
    });

    return sort_array.map(function(item) {
        var index = item[1];
        return items[index];
    });
}

function key_alpha(col_index) {
    return function(elem) {
        return elem.childNodes[col_index].firstChild.data.toLowerCase();
    };
}

function key_num(col_index) {
    return function(elem) {
        return parseFloat(elem.childNodes[col_index].firstChild.data);
    };
}

function key_result(col_index) {
    return function(elem) {
        var strings = ['Error', 'Failed', 'XFailed', 'XPassed', 'Skipped',
                       'Passed'];
        return strings.indexOf(elem.childNodes[col_index].firstChild.data);
    };
}

function reset_sort_headers() {
    find_all('.sort-icon').forEach(function(elem) {
        elem.parentNode.removeChild(elem);
    });
    find_all('.sortable').forEach(function(elem) {
        var icon = document.createElement("div");
        icon.className = "sort-icon";
        icon.textContent = "vvv";
        elem.insertBefore(icon, elem.firstChild);
        elem.classList.remove("desc", "active");
        elem.classList.add("asc", "inactive");
    });
}

function toggle_sort_states(elem) {
    //if active, toggle between asc and desc
    if (elem.classList.contains('active')) {
        elem.classList.toggle('asc');
        elem.classList.toggle('desc');
    }

    //if inactive, reset all other functions and add ascending active
    if (elem.classList.contains('inactive')) {
        reset_sort_headers();
        elem.classList.remove('inactive');
        elem.classList.add('active');
    }
}

function split_extra_onto_two_rows() {
    find_all('tr.results-table-row').forEach(function(elem) {
        var new_row = document.createElement("tr")
        new_row.className = "extra";
        elem.parentNode.insertBefore(new_row, elem.nextSibling);
        find_all(".extra", elem).forEach(function (td_elem) {
            if (find("*:not(.empty)", td_elem)) {
                new_row.appendChild(td_elem);
                td_elem.colSpan=5;
            } else {
                td_elem.parentNode.removeChild(td_elem);
            }
        });
    });
}

function one_row_for_data() {
    find_all('tr.results-table-row').forEach(function(elem) {
        if (elem.nextSibling.classList.contains('extra')) {
            toArray(elem.nextSibling.childNodes).forEach(
                function (td_elem) {
                    elem.appendChild(td_elem);
                })
        } else {
            var new_td = document.createElement("td");
            new_td.className = "extra";
            elem.appendChild(new_td);
        }
    });
}
</script>
    <p>Report generated on 29-Jan-2016 at 20:54:37</p>
    <h2>Environment</h2>
    <table id="environment">
      <tr>
        <td>Platform</td>
        <td>Linux-4.1.13-boot2docker-x86_64-with-Ubuntu-14.04-trusty</td></tr>
      <tr>
        <td>Python</td>
        <td>3.4.3</td></tr></table>
    <h2>Summary</h2>
    <p>160 tests ran in 23.35 seconds.<br/><span class="passed">119 passed</span>, <span class="skipped">29 skipped</span>, <span class="failed">41 failed</span>, <span class="error">0 errors</span>.<br/><span class="skipped">0 expected failures</span>, <span class="failed">0 unexpected passes</span>.</p>
    <h2>Results</h2>
    <table id="results-table">
      <thead id="results-table-head">
        <tr>
          <th class="sortable initial-sort result" col="result">Result</th>
          <th class="sortable" col="name">Test</th>
          <th class="sortable numeric" col="duration">Duration</th>
          <th>Links</th></tr></thead>
      <tbody id="results-table-body">
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_signature_equality[libmacaroons]</td>
          <td class="col-duration">0.07</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_signature_equality[pymacaroons]</td>
          <td class="col-duration">0.08</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_signature_equality[ruby-macaroons]</td>
          <td class="col-duration">0.25</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_signature_equality[macaroons-js]</td>
          <td class="col-duration">0.34</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_signature_equality[go-macaroon]</td>
          <td class="col-duration">1.04</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_signature_equality[php-macaroons]</td>
          <td class="col-duration">0.12</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_signature_equality[rust-macaroons]</td>
          <td class="col-duration">0.01</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_first_party_caveat_signature[libmacaroons]</td>
          <td class="col-duration">0.06</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_first_party_caveat_signature[pymacaroons]</td>
          <td class="col-duration">0.11</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_first_party_caveat_signature[ruby-macaroons]</td>
          <td class="col-duration">0.15</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_first_party_caveat_signature[macaroons-js]</td>
          <td class="col-duration">0.38</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_first_party_caveat_signature[go-macaroon]</td>
          <td class="col-duration">0.70</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_first_party_caveat_signature[php-macaroons]</td>
          <td class="col-duration">0.04</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="skipped results-table-row">
          <td class="col-result">Skipped</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_first_party_caveat_signature[rust-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">(&#x27;/usr/src/tests/test_basic_compatibility.py&#x27;, 30, &#x27;Skipped: Test not implemented for rust-macaroons&#x27;)<br/></div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_serialization_equality[libmacaroons]</td>
          <td class="col-duration">0.02</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_serialization_equality[pymacaroons]</td>
          <td class="col-duration">0.24</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_serialization_equality[ruby-macaroons]</td>
          <td class="col-duration">0.21</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_serialization_equality[macaroons-js]</td>
          <td class="col-duration">0.21</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_serialization_equality[go-macaroon]</td>
          <td class="col-duration">0.66</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_serialization_equality[php-macaroons]</td>
          <td class="col-duration">0.13</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_serialization_equality[rust-macaroons]</td>
          <td class="col-duration">0.04</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[libmacaroons-pymacaroons]</td>
          <td class="col-duration">0.14</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[libmacaroons-ruby-macaroons]</td>
          <td class="col-duration">0.14</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[libmacaroons-macaroons-js]</td>
          <td class="col-duration">0.34</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[libmacaroons-go-macaroon]</td>
          <td class="col-duration">0.57</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[libmacaroons-php-macaroons]</td>
          <td class="col-duration">0.10</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[libmacaroons-rust-macaroons]</td>
          <td class="col-duration">0.01</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[pymacaroons-libmacaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[pymacaroons-ruby-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[pymacaroons-macaroons-js]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[pymacaroons-go-macaroon]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[pymacaroons-php-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[pymacaroons-rust-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[ruby-macaroons-libmacaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[ruby-macaroons-pymacaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[ruby-macaroons-macaroons-js]</td>
          <td class="col-duration">0.01</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[ruby-macaroons-go-macaroon]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[ruby-macaroons-php-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[ruby-macaroons-rust-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[macaroons-js-libmacaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[macaroons-js-pymacaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[macaroons-js-ruby-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[macaroons-js-go-macaroon]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[macaroons-js-php-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[macaroons-js-rust-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[go-macaroon-libmacaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[go-macaroon-pymacaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[go-macaroon-ruby-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[go-macaroon-macaroons-js]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[go-macaroon-php-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[go-macaroon-rust-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[php-macaroons-libmacaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[php-macaroons-pymacaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[php-macaroons-ruby-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[php-macaroons-macaroons-js]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[php-macaroons-go-macaroon]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[php-macaroons-rust-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[rust-macaroons-libmacaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[rust-macaroons-pymacaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[rust-macaroons-ruby-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[rust-macaroons-macaroons-js]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[rust-macaroons-go-macaroon]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_deserialization_interoperability[rust-macaroons-php-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[libmacaroons-pymacaroons]</td>
          <td class="col-duration">0.19</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[libmacaroons-ruby-macaroons]</td>
          <td class="col-duration">0.11</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[libmacaroons-macaroons-js]</td>
          <td class="col-duration">0.34</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[libmacaroons-go-macaroon]</td>
          <td class="col-duration">0.62</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[libmacaroons-php-macaroons]</td>
          <td class="col-duration">0.07</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[libmacaroons-rust-macaroons]</td>
          <td class="col-duration">0.01</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[pymacaroons-libmacaroons]</td>
          <td class="col-duration">0.07</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[pymacaroons-ruby-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[pymacaroons-macaroons-js]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[pymacaroons-go-macaroon]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[pymacaroons-php-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[pymacaroons-rust-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[ruby-macaroons-libmacaroons]</td>
          <td class="col-duration">0.21</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[ruby-macaroons-pymacaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[ruby-macaroons-macaroons-js]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[ruby-macaroons-go-macaroon]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[ruby-macaroons-php-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[ruby-macaroons-rust-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[macaroons-js-libmacaroons]</td>
          <td class="col-duration">0.26</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[macaroons-js-pymacaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[macaroons-js-ruby-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[macaroons-js-go-macaroon]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[macaroons-js-php-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[macaroons-js-rust-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[go-macaroon-libmacaroons]</td>
          <td class="col-duration">0.61</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[go-macaroon-pymacaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[go-macaroon-ruby-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[go-macaroon-macaroons-js]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[go-macaroon-php-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[go-macaroon-rust-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[php-macaroons-libmacaroons]</td>
          <td class="col-duration">0.04</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[php-macaroons-pymacaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[php-macaroons-ruby-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[php-macaroons-macaroons-js]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[php-macaroons-go-macaroon]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[php-macaroons-rust-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="skipped results-table-row">
          <td class="col-result">Skipped</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[rust-macaroons-libmacaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">(&#x27;/usr/src/tests/test_basic_compatibility.py&#x27;, 30, &#x27;Skipped: Test not implemented for rust-macaroons&#x27;)<br/></div></td></tr>
        <tr class="skipped results-table-row">
          <td class="col-result">Skipped</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[rust-macaroons-pymacaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">(&#x27;/usr/src/tests/test_basic_compatibility.py&#x27;, 30, &#x27;Skipped: Test not implemented for rust-macaroons&#x27;)<br/></div></td></tr>
        <tr class="skipped results-table-row">
          <td class="col-result">Skipped</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[rust-macaroons-ruby-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">(&#x27;/usr/src/tests/test_basic_compatibility.py&#x27;, 30, &#x27;Skipped: Test not implemented for rust-macaroons&#x27;)<br/></div></td></tr>
        <tr class="skipped results-table-row">
          <td class="col-result">Skipped</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[rust-macaroons-macaroons-js]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">(&#x27;/usr/src/tests/test_basic_compatibility.py&#x27;, 30, &#x27;Skipped: Test not implemented for rust-macaroons&#x27;)<br/></div></td></tr>
        <tr class="skipped results-table-row">
          <td class="col-result">Skipped</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[rust-macaroons-go-macaroon]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">(&#x27;/usr/src/tests/test_basic_compatibility.py&#x27;, 30, &#x27;Skipped: Test not implemented for rust-macaroons&#x27;)<br/></div></td></tr>
        <tr class="skipped results-table-row">
          <td class="col-result">Skipped</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_basic_first_party_caveat_verification[rust-macaroons-php-macaroons]</td>
          <td class="col-duration">0.01</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">(&#x27;/usr/src/tests/test_basic_compatibility.py&#x27;, 30, &#x27;Skipped: Test not implemented for rust-macaroons&#x27;)<br/></div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[libmacaroons-libmacaroons-libmacaroons]</td>
          <td class="col-duration">0.27</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[libmacaroons-libmacaroons-pymacaroons]</td>
          <td class="col-duration">0.07</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[libmacaroons-libmacaroons-ruby-macaroons]</td>
          <td class="col-duration">0.13</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[libmacaroons-libmacaroons-macaroons-js]</td>
          <td class="col-duration">0.34</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;libmacaroons&#x27;, macaroon_impl = &#x27;libmacaroons&#x27;, verify_impl = &#x27;macaroons-js&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>            macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        verify_command = &#x27;verify_third_party_macaroon&#x27;<br/>        verify_args = (<br/>            serialized_macaroon, bound_discharge, key,<br/>            first_party, discharge_first_party<br/>        )<br/>        verified, _ = execute_command(<br/>            verify_impl, verify_command, verify_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>&gt;       assert(verified == &quot;True&quot;)<br/><span class="error">E       assert &#x27;False&#x27; == &#x27;True&#x27;</span><br/><span class="error">E         - False</span><br/><span class="error">E         + True</span><br/><br/>tests/test_basic_compatibility.py:138: AssertionError<br/></div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[libmacaroons-libmacaroons-go-macaroon]</td>
          <td class="col-duration">0.57</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[libmacaroons-libmacaroons-php-macaroons]</td>
          <td class="col-duration">0.09</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;libmacaroons&#x27;, macaroon_impl = &#x27;libmacaroons&#x27;, verify_impl = &#x27;php-macaroons&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>            macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        verify_command = &#x27;verify_third_party_macaroon&#x27;<br/>        verify_args = (<br/>            serialized_macaroon, bound_discharge, key,<br/>            first_party, discharge_first_party<br/>        )<br/>        verified, _ = execute_command(<br/>&gt;           verify_impl, verify_command, verify_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/><br/>tests/test_basic_compatibility.py:135: <br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/>../lib/python3.4/functools.py:472: in wrapper<br/>    result = user_function(*args, **kwds)<br/>tests/test_basic_compatibility.py:27: in execute_command<br/>    return subprocess.check_output([path] + list(args))<br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/><br/>timeout = None<br/>popenargs = ([&#x27;implementations/php-macaroons/verify_third_party_macaroon&#x27;, &#x27;MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2...cnR5CjAwMmZzaWduYXR1cmUgRVru6SrWKAy7QL2JBr_e3hL9HnuU4io7E_oy-KyZZLwK&#x27;, &#x27;key&#x27;, &#x27;first_party&#x27;, &#x27;discharge_first_party&#x27;],), kwargs = {}<br/>inputdata = None, process = &lt;subprocess.Popen object at 0x7f5f2589a940&gt;, output = b&#x27;&#x27;, unused_err = None, retcode = 255<br/><br/>    def check_output(*popenargs, timeout=None, **kwargs):<br/>        r&quot;&quot;&quot;Run command with arguments and return its output.<br/>    <br/>        If the exit code was non-zero it raises a CalledProcessError.  The<br/>        CalledProcessError object will have the return code in the returncode<br/>        attribute and output in the output attribute.<br/>    <br/>        The arguments are the same as for the Popen constructor.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;ls&quot;, &quot;-l&quot;, &quot;/dev/null&quot;])<br/>        b&#x27;crw-rw-rw- 1 root root 1, 3 Oct 18  2007 /dev/null\n&#x27;<br/>    <br/>        The stdout argument is not allowed as it is used internally.<br/>        To capture standard error in the result, use stderr=STDOUT.<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;/bin/sh&quot;, &quot;-c&quot;,<br/>        ...               &quot;ls -l non_existent_file ; exit 0&quot;],<br/>        ...              stderr=STDOUT)<br/>        b&#x27;ls: non_existent_file: No such file or directory\n&#x27;<br/>    <br/>        There is an additional optional argument, &quot;input&quot;, allowing you to<br/>        pass a string to the subprocess&#x27;s stdin.  If you use this argument<br/>        you may not also use the Popen constructor&#x27;s &quot;stdin&quot; argument, as<br/>        it too will be used internally.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;sed&quot;, &quot;-e&quot;, &quot;s/foo/bar/&quot;],<br/>        ...              input=b&quot;when in the course of fooman events\n&quot;)<br/>        b&#x27;when in the course of barman events\n&#x27;<br/>    <br/>        If universal_newlines=True is passed, the return value will be a<br/>        string rather than bytes.<br/>        &quot;&quot;&quot;<br/>        if &#x27;stdout&#x27; in kwargs:<br/>            raise ValueError(&#x27;stdout argument not allowed, it will be overridden.&#x27;)<br/>        if &#x27;input&#x27; in kwargs:<br/>            if &#x27;stdin&#x27; in kwargs:<br/>                raise ValueError(&#x27;stdin and input arguments may not both be used.&#x27;)<br/>            inputdata = kwargs[&#x27;input&#x27;]<br/>            del kwargs[&#x27;input&#x27;]<br/>            kwargs[&#x27;stdin&#x27;] = PIPE<br/>        else:<br/>            inputdata = None<br/>        with Popen(*popenargs, stdout=PIPE, **kwargs) as process:<br/>            try:<br/>                output, unused_err = process.communicate(inputdata, timeout=timeout)<br/>            except TimeoutExpired:<br/>                process.kill()<br/>                output, unused_err = process.communicate()<br/>                raise TimeoutExpired(process.args, timeout, output=output)<br/>            except:<br/>                process.kill()<br/>                process.wait()<br/>                raise<br/>            retcode = process.poll()<br/>            if retcode:<br/>&gt;               raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E               subprocess.CalledProcessError: Command &#x27;[&#x27;implementations/php-macaroons/verify_third_party_macaroon&#x27;, &#x27;MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2lkIGZpcnN0X3BhcnR5CjAwMTVjaWQgZGlzY2hhcmdlX2lkCjAwNTF2aWQgwWXPn7sWAStidIZ8yf5NqnX5t2XAp3GXd5KPfE2seF0ur1wzaDyBHl4OtV-EHfWwT91qwoTjGTtfeAxMhUceFQ4LoNabM0c3CjAwMTVjbCBkaXNjaGFyZ2VfbG9jCjAwMmZzaWduYXR1cmUgc6Z2Nn5853b0tsNH4Mc0LdsXOgQn4l4GIP6ehRTybRgK&#x27;, &#x27;MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgRVru6SrWKAy7QL2JBr_e3hL9HnuU4io7E_oy-KyZZLwK&#x27;, &#x27;key&#x27;, &#x27;first_party&#x27;, &#x27;discharge_first_party&#x27;]&#x27; returned non-zero exit status 255</span><br/><br/>../lib/python3.4/subprocess.py:620: CalledProcessError<br/>----------------------------- Captured stderr call -----------------------------<br/>PHP Fatal error:  Undefined constant &apos;Sodium\CRYPTO_SECRETBOX_NONCEBYTES&apos; in /usr/src/implementations/php-macaroons/vendor/immense/macaroons/lib/Macaroons/Verifier.php on line 204
</div></td></tr>
        <tr class="skipped results-table-row">
          <td class="col-result">Skipped</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[libmacaroons-libmacaroons-rust-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">(&#x27;/usr/src/tests/test_basic_compatibility.py&#x27;, 30, &#x27;Skipped: Test not implemented for rust-macaroons&#x27;)<br/></div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[libmacaroons-pymacaroons-pymacaroons]</td>
          <td class="col-duration">0.20</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[libmacaroons-pymacaroons-ruby-macaroons]</td>
          <td class="col-duration">0.24</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[libmacaroons-pymacaroons-macaroons-js]</td>
          <td class="col-duration">0.20</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;libmacaroons&#x27;, macaroon_impl = &#x27;pymacaroons&#x27;, verify_impl = &#x27;macaroons-js&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>            macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        verify_command = &#x27;verify_third_party_macaroon&#x27;<br/>        verify_args = (<br/>            serialized_macaroon, bound_discharge, key,<br/>            first_party, discharge_first_party<br/>        )<br/>        verified, _ = execute_command(<br/>            verify_impl, verify_command, verify_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>&gt;       assert(verified == &quot;True&quot;)<br/><span class="error">E       assert &#x27;False&#x27; == &#x27;True&#x27;</span><br/><span class="error">E         - False</span><br/><span class="error">E         + True</span><br/><br/>tests/test_basic_compatibility.py:138: AssertionError<br/></div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[libmacaroons-pymacaroons-go-macaroon]</td>
          <td class="col-duration">0.63</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[libmacaroons-pymacaroons-php-macaroons]</td>
          <td class="col-duration">0.18</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;libmacaroons&#x27;, macaroon_impl = &#x27;pymacaroons&#x27;, verify_impl = &#x27;php-macaroons&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>            macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        verify_command = &#x27;verify_third_party_macaroon&#x27;<br/>        verify_args = (<br/>            serialized_macaroon, bound_discharge, key,<br/>            first_party, discharge_first_party<br/>        )<br/>        verified, _ = execute_command(<br/>&gt;           verify_impl, verify_command, verify_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/><br/>tests/test_basic_compatibility.py:135: <br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/>../lib/python3.4/functools.py:472: in wrapper<br/>    result = user_function(*args, **kwds)<br/>tests/test_basic_compatibility.py:27: in execute_command<br/>    return subprocess.check_output([path] + list(args))<br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/><br/>timeout = None<br/>popenargs = ([&#x27;implementations/php-macaroons/verify_third_party_macaroon&#x27;, &#x27;MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2...cnR5CjAwMmZzaWduYXR1cmUgB4E0TtjwF3uEhRN3uG4sD_I4pYPwZS1CjLLRBxVCLKsK&#x27;, &#x27;key&#x27;, &#x27;first_party&#x27;, &#x27;discharge_first_party&#x27;],), kwargs = {}<br/>inputdata = None, process = &lt;subprocess.Popen object at 0x7f5f257603c8&gt;, output = b&#x27;&#x27;, unused_err = None, retcode = 255<br/><br/>    def check_output(*popenargs, timeout=None, **kwargs):<br/>        r&quot;&quot;&quot;Run command with arguments and return its output.<br/>    <br/>        If the exit code was non-zero it raises a CalledProcessError.  The<br/>        CalledProcessError object will have the return code in the returncode<br/>        attribute and output in the output attribute.<br/>    <br/>        The arguments are the same as for the Popen constructor.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;ls&quot;, &quot;-l&quot;, &quot;/dev/null&quot;])<br/>        b&#x27;crw-rw-rw- 1 root root 1, 3 Oct 18  2007 /dev/null\n&#x27;<br/>    <br/>        The stdout argument is not allowed as it is used internally.<br/>        To capture standard error in the result, use stderr=STDOUT.<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;/bin/sh&quot;, &quot;-c&quot;,<br/>        ...               &quot;ls -l non_existent_file ; exit 0&quot;],<br/>        ...              stderr=STDOUT)<br/>        b&#x27;ls: non_existent_file: No such file or directory\n&#x27;<br/>    <br/>        There is an additional optional argument, &quot;input&quot;, allowing you to<br/>        pass a string to the subprocess&#x27;s stdin.  If you use this argument<br/>        you may not also use the Popen constructor&#x27;s &quot;stdin&quot; argument, as<br/>        it too will be used internally.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;sed&quot;, &quot;-e&quot;, &quot;s/foo/bar/&quot;],<br/>        ...              input=b&quot;when in the course of fooman events\n&quot;)<br/>        b&#x27;when in the course of barman events\n&#x27;<br/>    <br/>        If universal_newlines=True is passed, the return value will be a<br/>        string rather than bytes.<br/>        &quot;&quot;&quot;<br/>        if &#x27;stdout&#x27; in kwargs:<br/>            raise ValueError(&#x27;stdout argument not allowed, it will be overridden.&#x27;)<br/>        if &#x27;input&#x27; in kwargs:<br/>            if &#x27;stdin&#x27; in kwargs:<br/>                raise ValueError(&#x27;stdin and input arguments may not both be used.&#x27;)<br/>            inputdata = kwargs[&#x27;input&#x27;]<br/>            del kwargs[&#x27;input&#x27;]<br/>            kwargs[&#x27;stdin&#x27;] = PIPE<br/>        else:<br/>            inputdata = None<br/>        with Popen(*popenargs, stdout=PIPE, **kwargs) as process:<br/>            try:<br/>                output, unused_err = process.communicate(inputdata, timeout=timeout)<br/>            except TimeoutExpired:<br/>                process.kill()<br/>                output, unused_err = process.communicate()<br/>                raise TimeoutExpired(process.args, timeout, output=output)<br/>            except:<br/>                process.kill()<br/>                process.wait()<br/>                raise<br/>            retcode = process.poll()<br/>            if retcode:<br/>&gt;               raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E               subprocess.CalledProcessError: Command &#x27;[&#x27;implementations/php-macaroons/verify_third_party_macaroon&#x27;, &#x27;MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2lkIGZpcnN0X3BhcnR5CjAwMTVjaWQgZGlzY2hhcmdlX2lkCjAwNTF2aWQgA_tVuQq4ATvRBoYpVaXIjYWBf3HQKm66ueDX21hqLwmYU-NTMOFXdEUNMckbtm1sp2AiScSiYrnK4qnPpdlRQ_t8h1jfq1JaCjAwMTVjbCBkaXNjaGFyZ2VfbG9jCjAwMmZzaWduYXR1cmUghgva_4h6kNXX_9faoWhKBYy7WwNixYw6BPHZvYUYuKAK&#x27;, &#x27;MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgB4E0TtjwF3uEhRN3uG4sD_I4pYPwZS1CjLLRBxVCLKsK&#x27;, &#x27;key&#x27;, &#x27;first_party&#x27;, &#x27;discharge_first_party&#x27;]&#x27; returned non-zero exit status 255</span><br/><br/>../lib/python3.4/subprocess.py:620: CalledProcessError<br/>----------------------------- Captured stderr call -----------------------------<br/>PHP Fatal error:  Undefined constant &apos;Sodium\CRYPTO_SECRETBOX_NONCEBYTES&apos; in /usr/src/implementations/php-macaroons/vendor/immense/macaroons/lib/Macaroons/Verifier.php on line 204
</div></td></tr>
        <tr class="skipped results-table-row">
          <td class="col-result">Skipped</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[libmacaroons-pymacaroons-rust-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">(&#x27;/usr/src/tests/test_basic_compatibility.py&#x27;, 30, &#x27;Skipped: Test not implemented for rust-macaroons&#x27;)<br/></div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[libmacaroons-ruby-macaroons-ruby-macaroons]</td>
          <td class="col-duration">0.25</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[libmacaroons-ruby-macaroons-macaroons-js]</td>
          <td class="col-duration">0.33</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;libmacaroons&#x27;, macaroon_impl = &#x27;ruby-macaroons&#x27;, verify_impl = &#x27;macaroons-js&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>            macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        verify_command = &#x27;verify_third_party_macaroon&#x27;<br/>        verify_args = (<br/>            serialized_macaroon, bound_discharge, key,<br/>            first_party, discharge_first_party<br/>        )<br/>        verified, _ = execute_command(<br/>            verify_impl, verify_command, verify_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>&gt;       assert(verified == &quot;True&quot;)<br/><span class="error">E       assert &#x27;False&#x27; == &#x27;True&#x27;</span><br/><span class="error">E         - False</span><br/><span class="error">E         + True</span><br/><br/>tests/test_basic_compatibility.py:138: AssertionError<br/></div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[libmacaroons-ruby-macaroons-go-macaroon]</td>
          <td class="col-duration">0.57</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[libmacaroons-ruby-macaroons-php-macaroons]</td>
          <td class="col-duration">0.07</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;libmacaroons&#x27;, macaroon_impl = &#x27;ruby-macaroons&#x27;, verify_impl = &#x27;php-macaroons&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>            macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        verify_command = &#x27;verify_third_party_macaroon&#x27;<br/>        verify_args = (<br/>            serialized_macaroon, bound_discharge, key,<br/>            first_party, discharge_first_party<br/>        )<br/>        verified, _ = execute_command(<br/>&gt;           verify_impl, verify_command, verify_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/><br/>tests/test_basic_compatibility.py:135: <br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/>../lib/python3.4/functools.py:472: in wrapper<br/>    result = user_function(*args, **kwds)<br/>tests/test_basic_compatibility.py:27: in execute_command<br/>    return subprocess.check_output([path] + list(args))<br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/><br/>timeout = None<br/>popenargs = ([&#x27;implementations/php-macaroons/verify_third_party_macaroon&#x27;, &#x27;MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2...cnR5CjAwMmZzaWduYXR1cmUg1nxh0i0oUM6FEGn6sF80as_Trk5UPJpUsoeadPrz4hYK&#x27;, &#x27;key&#x27;, &#x27;first_party&#x27;, &#x27;discharge_first_party&#x27;],), kwargs = {}<br/>inputdata = None, process = &lt;subprocess.Popen object at 0x7f5f2576c080&gt;, output = b&#x27;&#x27;, unused_err = None, retcode = 255<br/><br/>    def check_output(*popenargs, timeout=None, **kwargs):<br/>        r&quot;&quot;&quot;Run command with arguments and return its output.<br/>    <br/>        If the exit code was non-zero it raises a CalledProcessError.  The<br/>        CalledProcessError object will have the return code in the returncode<br/>        attribute and output in the output attribute.<br/>    <br/>        The arguments are the same as for the Popen constructor.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;ls&quot;, &quot;-l&quot;, &quot;/dev/null&quot;])<br/>        b&#x27;crw-rw-rw- 1 root root 1, 3 Oct 18  2007 /dev/null\n&#x27;<br/>    <br/>        The stdout argument is not allowed as it is used internally.<br/>        To capture standard error in the result, use stderr=STDOUT.<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;/bin/sh&quot;, &quot;-c&quot;,<br/>        ...               &quot;ls -l non_existent_file ; exit 0&quot;],<br/>        ...              stderr=STDOUT)<br/>        b&#x27;ls: non_existent_file: No such file or directory\n&#x27;<br/>    <br/>        There is an additional optional argument, &quot;input&quot;, allowing you to<br/>        pass a string to the subprocess&#x27;s stdin.  If you use this argument<br/>        you may not also use the Popen constructor&#x27;s &quot;stdin&quot; argument, as<br/>        it too will be used internally.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;sed&quot;, &quot;-e&quot;, &quot;s/foo/bar/&quot;],<br/>        ...              input=b&quot;when in the course of fooman events\n&quot;)<br/>        b&#x27;when in the course of barman events\n&#x27;<br/>    <br/>        If universal_newlines=True is passed, the return value will be a<br/>        string rather than bytes.<br/>        &quot;&quot;&quot;<br/>        if &#x27;stdout&#x27; in kwargs:<br/>            raise ValueError(&#x27;stdout argument not allowed, it will be overridden.&#x27;)<br/>        if &#x27;input&#x27; in kwargs:<br/>            if &#x27;stdin&#x27; in kwargs:<br/>                raise ValueError(&#x27;stdin and input arguments may not both be used.&#x27;)<br/>            inputdata = kwargs[&#x27;input&#x27;]<br/>            del kwargs[&#x27;input&#x27;]<br/>            kwargs[&#x27;stdin&#x27;] = PIPE<br/>        else:<br/>            inputdata = None<br/>        with Popen(*popenargs, stdout=PIPE, **kwargs) as process:<br/>            try:<br/>                output, unused_err = process.communicate(inputdata, timeout=timeout)<br/>            except TimeoutExpired:<br/>                process.kill()<br/>                output, unused_err = process.communicate()<br/>                raise TimeoutExpired(process.args, timeout, output=output)<br/>            except:<br/>                process.kill()<br/>                process.wait()<br/>                raise<br/>            retcode = process.poll()<br/>            if retcode:<br/>&gt;               raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E               subprocess.CalledProcessError: Command &#x27;[&#x27;implementations/php-macaroons/verify_third_party_macaroon&#x27;, &#x27;MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2lkIGZpcnN0X3BhcnR5CjAwMTVjaWQgZGlzY2hhcmdlX2lkCjAwNTF2aWQgSwSk4AFjnK59Vk7h-gfjH5LKotcmv4msR--sqc5xhBy_b32W_PaB4g5MYZIyfn0pE7s2l0QuJzTJT0C3r5qPQB2wyZmc1KmaCjAwMTVjbCBkaXNjaGFyZ2VfbG9jCjAwMmZzaWduYXR1cmUgIZRROCMRe8uSnwoTeo0qZ8NAPVgJ5Vh_80MIF0hP8BwK&#x27;, &#x27;MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUg1nxh0i0oUM6FEGn6sF80as_Trk5UPJpUsoeadPrz4hYK&#x27;, &#x27;key&#x27;, &#x27;first_party&#x27;, &#x27;discharge_first_party&#x27;]&#x27; returned non-zero exit status 255</span><br/><br/>../lib/python3.4/subprocess.py:620: CalledProcessError<br/>----------------------------- Captured stderr call -----------------------------<br/>PHP Fatal error:  Undefined constant &apos;Sodium\CRYPTO_SECRETBOX_NONCEBYTES&apos; in /usr/src/implementations/php-macaroons/vendor/immense/macaroons/lib/Macaroons/Verifier.php on line 204
</div></td></tr>
        <tr class="skipped results-table-row">
          <td class="col-result">Skipped</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[libmacaroons-ruby-macaroons-rust-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">(&#x27;/usr/src/tests/test_basic_compatibility.py&#x27;, 30, &#x27;Skipped: Test not implemented for rust-macaroons&#x27;)<br/></div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[libmacaroons-macaroons-js-macaroons-js]</td>
          <td class="col-duration">0.61</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;libmacaroons&#x27;, macaroon_impl = &#x27;macaroons-js&#x27;, verify_impl = &#x27;macaroons-js&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>            macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        verify_command = &#x27;verify_third_party_macaroon&#x27;<br/>        verify_args = (<br/>            serialized_macaroon, bound_discharge, key,<br/>            first_party, discharge_first_party<br/>        )<br/>        verified, _ = execute_command(<br/>            verify_impl, verify_command, verify_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>&gt;       assert(verified == &quot;True&quot;)<br/><span class="error">E       assert &#x27;False&#x27; == &#x27;True&#x27;</span><br/><span class="error">E         - False</span><br/><span class="error">E         + True</span><br/><br/>tests/test_basic_compatibility.py:138: AssertionError<br/></div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[libmacaroons-macaroons-js-go-macaroon]</td>
          <td class="col-duration">0.54</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;libmacaroons&#x27;, macaroon_impl = &#x27;macaroons-js&#x27;, verify_impl = &#x27;go-macaroon&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>            macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        verify_command = &#x27;verify_third_party_macaroon&#x27;<br/>        verify_args = (<br/>            serialized_macaroon, bound_discharge, key,<br/>            first_party, discharge_first_party<br/>        )<br/>        verified, _ = execute_command(<br/>            verify_impl, verify_command, verify_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>&gt;       assert(verified == &quot;True&quot;)<br/><span class="error">E       assert &#x27;failed to de...ption failure&#x27; == &#x27;True&#x27;</span><br/><span class="error">E         - failed to decrypt caveat 1 signature: decryption failure</span><br/><span class="error">E         + True</span><br/><br/>tests/test_basic_compatibility.py:138: AssertionError<br/></div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[libmacaroons-macaroons-js-php-macaroons]</td>
          <td class="col-duration">0.19</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;libmacaroons&#x27;, macaroon_impl = &#x27;macaroons-js&#x27;, verify_impl = &#x27;php-macaroons&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>            macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        verify_command = &#x27;verify_third_party_macaroon&#x27;<br/>        verify_args = (<br/>            serialized_macaroon, bound_discharge, key,<br/>            first_party, discharge_first_party<br/>        )<br/>        verified, _ = execute_command(<br/>&gt;           verify_impl, verify_command, verify_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/><br/>tests/test_basic_compatibility.py:135: <br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/>../lib/python3.4/functools.py:472: in wrapper<br/>    result = user_function(*args, **kwds)<br/>tests/test_basic_compatibility.py:27: in execute_command<br/>    return subprocess.check_output([path] + list(args))<br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/><br/>timeout = None<br/>popenargs = ([&#x27;implementations/php-macaroons/verify_third_party_macaroon&#x27;, &#x27;MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2...cnR5CjAwMmZzaWduYXR1cmUgNddQgB0o9qjwddy5A7NGm1juaTGaU-Ov1fN9RS5j9iEK&#x27;, &#x27;key&#x27;, &#x27;first_party&#x27;, &#x27;discharge_first_party&#x27;],), kwargs = {}<br/>inputdata = None, process = &lt;subprocess.Popen object at 0x7f5f2582f898&gt;, output = b&#x27;&#x27;, unused_err = None, retcode = 255<br/><br/>    def check_output(*popenargs, timeout=None, **kwargs):<br/>        r&quot;&quot;&quot;Run command with arguments and return its output.<br/>    <br/>        If the exit code was non-zero it raises a CalledProcessError.  The<br/>        CalledProcessError object will have the return code in the returncode<br/>        attribute and output in the output attribute.<br/>    <br/>        The arguments are the same as for the Popen constructor.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;ls&quot;, &quot;-l&quot;, &quot;/dev/null&quot;])<br/>        b&#x27;crw-rw-rw- 1 root root 1, 3 Oct 18  2007 /dev/null\n&#x27;<br/>    <br/>        The stdout argument is not allowed as it is used internally.<br/>        To capture standard error in the result, use stderr=STDOUT.<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;/bin/sh&quot;, &quot;-c&quot;,<br/>        ...               &quot;ls -l non_existent_file ; exit 0&quot;],<br/>        ...              stderr=STDOUT)<br/>        b&#x27;ls: non_existent_file: No such file or directory\n&#x27;<br/>    <br/>        There is an additional optional argument, &quot;input&quot;, allowing you to<br/>        pass a string to the subprocess&#x27;s stdin.  If you use this argument<br/>        you may not also use the Popen constructor&#x27;s &quot;stdin&quot; argument, as<br/>        it too will be used internally.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;sed&quot;, &quot;-e&quot;, &quot;s/foo/bar/&quot;],<br/>        ...              input=b&quot;when in the course of fooman events\n&quot;)<br/>        b&#x27;when in the course of barman events\n&#x27;<br/>    <br/>        If universal_newlines=True is passed, the return value will be a<br/>        string rather than bytes.<br/>        &quot;&quot;&quot;<br/>        if &#x27;stdout&#x27; in kwargs:<br/>            raise ValueError(&#x27;stdout argument not allowed, it will be overridden.&#x27;)<br/>        if &#x27;input&#x27; in kwargs:<br/>            if &#x27;stdin&#x27; in kwargs:<br/>                raise ValueError(&#x27;stdin and input arguments may not both be used.&#x27;)<br/>            inputdata = kwargs[&#x27;input&#x27;]<br/>            del kwargs[&#x27;input&#x27;]<br/>            kwargs[&#x27;stdin&#x27;] = PIPE<br/>        else:<br/>            inputdata = None<br/>        with Popen(*popenargs, stdout=PIPE, **kwargs) as process:<br/>            try:<br/>                output, unused_err = process.communicate(inputdata, timeout=timeout)<br/>            except TimeoutExpired:<br/>                process.kill()<br/>                output, unused_err = process.communicate()<br/>                raise TimeoutExpired(process.args, timeout, output=output)<br/>            except:<br/>                process.kill()<br/>                process.wait()<br/>                raise<br/>            retcode = process.poll()<br/>            if retcode:<br/>&gt;               raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E               subprocess.CalledProcessError: Command &#x27;[&#x27;implementations/php-macaroons/verify_third_party_macaroon&#x27;, &#x27;MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2lkIGZpcnN0X3BhcnR5CjAwMTVjaWQgZGlzY2hhcmdlX2lkCjAwNTF2aWQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACjAwMTVjbCBkaXNjaGFyZ2VfbG9jCjAwMmZzaWduYXR1cmUgJGZnHPI7E15-2tMskOtuGD5RBTK4x2Hf-e0VtoSm43cK&#x27;, &#x27;MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgNddQgB0o9qjwddy5A7NGm1juaTGaU-Ov1fN9RS5j9iEK&#x27;, &#x27;key&#x27;, &#x27;first_party&#x27;, &#x27;discharge_first_party&#x27;]&#x27; returned non-zero exit status 255</span><br/><br/>../lib/python3.4/subprocess.py:620: CalledProcessError<br/>----------------------------- Captured stderr call -----------------------------<br/>PHP Fatal error:  Undefined constant &apos;Sodium\CRYPTO_SECRETBOX_NONCEBYTES&apos; in /usr/src/implementations/php-macaroons/vendor/immense/macaroons/lib/Macaroons/Verifier.php on line 204
</div></td></tr>
        <tr class="skipped results-table-row">
          <td class="col-result">Skipped</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[libmacaroons-macaroons-js-rust-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">(&#x27;/usr/src/tests/test_basic_compatibility.py&#x27;, 30, &#x27;Skipped: Test not implemented for rust-macaroons&#x27;)<br/></div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[libmacaroons-go-macaroon-go-macaroon]</td>
          <td class="col-duration">1.25</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[libmacaroons-go-macaroon-php-macaroons]</td>
          <td class="col-duration">0.13</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;libmacaroons&#x27;, macaroon_impl = &#x27;go-macaroon&#x27;, verify_impl = &#x27;php-macaroons&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>            macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        verify_command = &#x27;verify_third_party_macaroon&#x27;<br/>        verify_args = (<br/>            serialized_macaroon, bound_discharge, key,<br/>            first_party, discharge_first_party<br/>        )<br/>        verified, _ = execute_command(<br/>&gt;           verify_impl, verify_command, verify_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/><br/>tests/test_basic_compatibility.py:135: <br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/>../lib/python3.4/functools.py:472: in wrapper<br/>    result = user_function(*args, **kwds)<br/>tests/test_basic_compatibility.py:27: in execute_command<br/>    return subprocess.check_output([path] + list(args))<br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/><br/>timeout = None<br/>popenargs = ([&#x27;implementations/php-macaroons/verify_third_party_macaroon&#x27;, &#x27;MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2...cnR5CjAwMmZzaWduYXR1cmUgjjR1B00v5oj9o_C_FEWvVqD1q8pk7j2RvzzsUFI1Dd4K&#x27;, &#x27;key&#x27;, &#x27;first_party&#x27;, &#x27;discharge_first_party&#x27;],), kwargs = {}<br/>inputdata = None, process = &lt;subprocess.Popen object at 0x7f5f25820080&gt;, output = b&#x27;&#x27;, unused_err = None, retcode = 255<br/><br/>    def check_output(*popenargs, timeout=None, **kwargs):<br/>        r&quot;&quot;&quot;Run command with arguments and return its output.<br/>    <br/>        If the exit code was non-zero it raises a CalledProcessError.  The<br/>        CalledProcessError object will have the return code in the returncode<br/>        attribute and output in the output attribute.<br/>    <br/>        The arguments are the same as for the Popen constructor.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;ls&quot;, &quot;-l&quot;, &quot;/dev/null&quot;])<br/>        b&#x27;crw-rw-rw- 1 root root 1, 3 Oct 18  2007 /dev/null\n&#x27;<br/>    <br/>        The stdout argument is not allowed as it is used internally.<br/>        To capture standard error in the result, use stderr=STDOUT.<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;/bin/sh&quot;, &quot;-c&quot;,<br/>        ...               &quot;ls -l non_existent_file ; exit 0&quot;],<br/>        ...              stderr=STDOUT)<br/>        b&#x27;ls: non_existent_file: No such file or directory\n&#x27;<br/>    <br/>        There is an additional optional argument, &quot;input&quot;, allowing you to<br/>        pass a string to the subprocess&#x27;s stdin.  If you use this argument<br/>        you may not also use the Popen constructor&#x27;s &quot;stdin&quot; argument, as<br/>        it too will be used internally.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;sed&quot;, &quot;-e&quot;, &quot;s/foo/bar/&quot;],<br/>        ...              input=b&quot;when in the course of fooman events\n&quot;)<br/>        b&#x27;when in the course of barman events\n&#x27;<br/>    <br/>        If universal_newlines=True is passed, the return value will be a<br/>        string rather than bytes.<br/>        &quot;&quot;&quot;<br/>        if &#x27;stdout&#x27; in kwargs:<br/>            raise ValueError(&#x27;stdout argument not allowed, it will be overridden.&#x27;)<br/>        if &#x27;input&#x27; in kwargs:<br/>            if &#x27;stdin&#x27; in kwargs:<br/>                raise ValueError(&#x27;stdin and input arguments may not both be used.&#x27;)<br/>            inputdata = kwargs[&#x27;input&#x27;]<br/>            del kwargs[&#x27;input&#x27;]<br/>            kwargs[&#x27;stdin&#x27;] = PIPE<br/>        else:<br/>            inputdata = None<br/>        with Popen(*popenargs, stdout=PIPE, **kwargs) as process:<br/>            try:<br/>                output, unused_err = process.communicate(inputdata, timeout=timeout)<br/>            except TimeoutExpired:<br/>                process.kill()<br/>                output, unused_err = process.communicate()<br/>                raise TimeoutExpired(process.args, timeout, output=output)<br/>            except:<br/>                process.kill()<br/>                process.wait()<br/>                raise<br/>            retcode = process.poll()<br/>            if retcode:<br/>&gt;               raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E               subprocess.CalledProcessError: Command &#x27;[&#x27;implementations/php-macaroons/verify_third_party_macaroon&#x27;, &#x27;MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2lkIGZpcnN0X3BhcnR5CjAwMTVjaWQgZGlzY2hhcmdlX2lkCjAwNTF2aWQgPUhWrZl6yEAFa7xjWnnf0_MxYvwDjv2g7XWYq1Z3woDnXZ9OrHyYvLG_Vkq30_e4ZMW_jDsR_uuqA-GCILDiQq03ymvbP2lOCjAwMTVjbCBkaXNjaGFyZ2VfbG9jCjAwMmZzaWduYXR1cmUgRyl7u2x3FzGRMjlC_8yZ6DdMvfsrBLKxsPDcUOz4YnkK&#x27;, &#x27;MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgjjR1B00v5oj9o_C_FEWvVqD1q8pk7j2RvzzsUFI1Dd4K&#x27;, &#x27;key&#x27;, &#x27;first_party&#x27;, &#x27;discharge_first_party&#x27;]&#x27; returned non-zero exit status 255</span><br/><br/>../lib/python3.4/subprocess.py:620: CalledProcessError<br/>----------------------------- Captured stderr call -----------------------------<br/>PHP Fatal error:  Undefined constant &apos;Sodium\CRYPTO_SECRETBOX_NONCEBYTES&apos; in /usr/src/implementations/php-macaroons/vendor/immense/macaroons/lib/Macaroons/Verifier.php on line 204
</div></td></tr>
        <tr class="skipped results-table-row">
          <td class="col-result">Skipped</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[libmacaroons-go-macaroon-rust-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">(&#x27;/usr/src/tests/test_basic_compatibility.py&#x27;, 30, &#x27;Skipped: Test not implemented for rust-macaroons&#x27;)<br/></div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[libmacaroons-php-macaroons-php-macaroons]</td>
          <td class="col-duration">0.04</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;libmacaroons&#x27;, macaroon_impl = &#x27;php-macaroons&#x27;, verify_impl = &#x27;php-macaroons&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>&gt;           macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/><br/>tests/test_basic_compatibility.py:126: <br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/>../lib/python3.4/functools.py:472: in wrapper<br/>    result = user_function(*args, **kwds)<br/>tests/test_basic_compatibility.py:27: in execute_command<br/>    return subprocess.check_output([path] + list(args))<br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/><br/>timeout = None, popenargs = ([&#x27;implementations/php-macaroons/third_party_macaroon_serialized&#x27;, &#x27;loc&#x27;, &#x27;key&#x27;, &#x27;id&#x27;, &#x27;first_party&#x27;, &#x27;discharge_loc&#x27;, ...],), kwargs = {}, inputdata = None, process = &lt;subprocess.Popen object at 0x7f5f25829b70&gt;, output = b&#x27;&#x27;<br/>unused_err = None, retcode = 255<br/><br/>    def check_output(*popenargs, timeout=None, **kwargs):<br/>        r&quot;&quot;&quot;Run command with arguments and return its output.<br/>    <br/>        If the exit code was non-zero it raises a CalledProcessError.  The<br/>        CalledProcessError object will have the return code in the returncode<br/>        attribute and output in the output attribute.<br/>    <br/>        The arguments are the same as for the Popen constructor.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;ls&quot;, &quot;-l&quot;, &quot;/dev/null&quot;])<br/>        b&#x27;crw-rw-rw- 1 root root 1, 3 Oct 18  2007 /dev/null\n&#x27;<br/>    <br/>        The stdout argument is not allowed as it is used internally.<br/>        To capture standard error in the result, use stderr=STDOUT.<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;/bin/sh&quot;, &quot;-c&quot;,<br/>        ...               &quot;ls -l non_existent_file ; exit 0&quot;],<br/>        ...              stderr=STDOUT)<br/>        b&#x27;ls: non_existent_file: No such file or directory\n&#x27;<br/>    <br/>        There is an additional optional argument, &quot;input&quot;, allowing you to<br/>        pass a string to the subprocess&#x27;s stdin.  If you use this argument<br/>        you may not also use the Popen constructor&#x27;s &quot;stdin&quot; argument, as<br/>        it too will be used internally.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;sed&quot;, &quot;-e&quot;, &quot;s/foo/bar/&quot;],<br/>        ...              input=b&quot;when in the course of fooman events\n&quot;)<br/>        b&#x27;when in the course of barman events\n&#x27;<br/>    <br/>        If universal_newlines=True is passed, the return value will be a<br/>        string rather than bytes.<br/>        &quot;&quot;&quot;<br/>        if &#x27;stdout&#x27; in kwargs:<br/>            raise ValueError(&#x27;stdout argument not allowed, it will be overridden.&#x27;)<br/>        if &#x27;input&#x27; in kwargs:<br/>            if &#x27;stdin&#x27; in kwargs:<br/>                raise ValueError(&#x27;stdin and input arguments may not both be used.&#x27;)<br/>            inputdata = kwargs[&#x27;input&#x27;]<br/>            del kwargs[&#x27;input&#x27;]<br/>            kwargs[&#x27;stdin&#x27;] = PIPE<br/>        else:<br/>            inputdata = None<br/>        with Popen(*popenargs, stdout=PIPE, **kwargs) as process:<br/>            try:<br/>                output, unused_err = process.communicate(inputdata, timeout=timeout)<br/>            except TimeoutExpired:<br/>                process.kill()<br/>                output, unused_err = process.communicate()<br/>                raise TimeoutExpired(process.args, timeout, output=output)<br/>            except:<br/>                process.kill()<br/>                process.wait()<br/>                raise<br/>            retcode = process.poll()<br/>            if retcode:<br/>&gt;               raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E               subprocess.CalledProcessError: Command &#x27;[&#x27;implementations/php-macaroons/third_party_macaroon_serialized&#x27;, &#x27;loc&#x27;, &#x27;key&#x27;, &#x27;id&#x27;, &#x27;first_party&#x27;, &#x27;discharge_loc&#x27;, &#x27;discharge_key&#x27;, &#x27;discharge_id&#x27;, &#x27;MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgZMyVaQHSRRPRQPl7S1zgIHnbz6lrtAFr-42xmzq5P5IK&#x27;]&#x27; returned non-zero exit status 255</span><br/><br/>../lib/python3.4/subprocess.py:620: CalledProcessError<br/>----------------------------- Captured stderr call -----------------------------<br/>PHP Fatal error:  Call to undefined function Sodium\randombytes_buf() in /usr/src/implementations/php-macaroons/vendor/immense/macaroons/lib/Macaroons/Macaroon.php on line 78
</div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[libmacaroons-php-macaroons-rust-macaroons]</td>
          <td class="col-duration">0.16</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;libmacaroons&#x27;, macaroon_impl = &#x27;php-macaroons&#x27;, verify_impl = &#x27;rust-macaroons&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>&gt;           macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/><br/>tests/test_basic_compatibility.py:126: <br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/>../lib/python3.4/functools.py:472: in wrapper<br/>    result = user_function(*args, **kwds)<br/>tests/test_basic_compatibility.py:27: in execute_command<br/>    return subprocess.check_output([path] + list(args))<br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/><br/>timeout = None, popenargs = ([&#x27;implementations/php-macaroons/third_party_macaroon_serialized&#x27;, &#x27;loc&#x27;, &#x27;key&#x27;, &#x27;id&#x27;, &#x27;first_party&#x27;, &#x27;discharge_loc&#x27;, ...],), kwargs = {}, inputdata = None, process = &lt;subprocess.Popen object at 0x7f5f2584dbe0&gt;, output = b&#x27;&#x27;<br/>unused_err = None, retcode = 255<br/><br/>    def check_output(*popenargs, timeout=None, **kwargs):<br/>        r&quot;&quot;&quot;Run command with arguments and return its output.<br/>    <br/>        If the exit code was non-zero it raises a CalledProcessError.  The<br/>        CalledProcessError object will have the return code in the returncode<br/>        attribute and output in the output attribute.<br/>    <br/>        The arguments are the same as for the Popen constructor.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;ls&quot;, &quot;-l&quot;, &quot;/dev/null&quot;])<br/>        b&#x27;crw-rw-rw- 1 root root 1, 3 Oct 18  2007 /dev/null\n&#x27;<br/>    <br/>        The stdout argument is not allowed as it is used internally.<br/>        To capture standard error in the result, use stderr=STDOUT.<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;/bin/sh&quot;, &quot;-c&quot;,<br/>        ...               &quot;ls -l non_existent_file ; exit 0&quot;],<br/>        ...              stderr=STDOUT)<br/>        b&#x27;ls: non_existent_file: No such file or directory\n&#x27;<br/>    <br/>        There is an additional optional argument, &quot;input&quot;, allowing you to<br/>        pass a string to the subprocess&#x27;s stdin.  If you use this argument<br/>        you may not also use the Popen constructor&#x27;s &quot;stdin&quot; argument, as<br/>        it too will be used internally.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;sed&quot;, &quot;-e&quot;, &quot;s/foo/bar/&quot;],<br/>        ...              input=b&quot;when in the course of fooman events\n&quot;)<br/>        b&#x27;when in the course of barman events\n&#x27;<br/>    <br/>        If universal_newlines=True is passed, the return value will be a<br/>        string rather than bytes.<br/>        &quot;&quot;&quot;<br/>        if &#x27;stdout&#x27; in kwargs:<br/>            raise ValueError(&#x27;stdout argument not allowed, it will be overridden.&#x27;)<br/>        if &#x27;input&#x27; in kwargs:<br/>            if &#x27;stdin&#x27; in kwargs:<br/>                raise ValueError(&#x27;stdin and input arguments may not both be used.&#x27;)<br/>            inputdata = kwargs[&#x27;input&#x27;]<br/>            del kwargs[&#x27;input&#x27;]<br/>            kwargs[&#x27;stdin&#x27;] = PIPE<br/>        else:<br/>            inputdata = None<br/>        with Popen(*popenargs, stdout=PIPE, **kwargs) as process:<br/>            try:<br/>                output, unused_err = process.communicate(inputdata, timeout=timeout)<br/>            except TimeoutExpired:<br/>                process.kill()<br/>                output, unused_err = process.communicate()<br/>                raise TimeoutExpired(process.args, timeout, output=output)<br/>            except:<br/>                process.kill()<br/>                process.wait()<br/>                raise<br/>            retcode = process.poll()<br/>            if retcode:<br/>&gt;               raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E               subprocess.CalledProcessError: Command &#x27;[&#x27;implementations/php-macaroons/third_party_macaroon_serialized&#x27;, &#x27;loc&#x27;, &#x27;key&#x27;, &#x27;id&#x27;, &#x27;first_party&#x27;, &#x27;discharge_loc&#x27;, &#x27;discharge_key&#x27;, &#x27;discharge_id&#x27;, &#x27;MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgZMyVaQHSRRPRQPl7S1zgIHnbz6lrtAFr-42xmzq5P5IK&#x27;]&#x27; returned non-zero exit status 255</span><br/><br/>../lib/python3.4/subprocess.py:620: CalledProcessError<br/>----------------------------- Captured stderr call -----------------------------<br/>PHP Fatal error:  Call to undefined function Sodium\randombytes_buf() in /usr/src/implementations/php-macaroons/vendor/immense/macaroons/lib/Macaroons/Macaroon.php on line 78
</div></td></tr>
        <tr class="skipped results-table-row">
          <td class="col-result">Skipped</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[libmacaroons-rust-macaroons-rust-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">(&#x27;/usr/src/tests/test_basic_compatibility.py&#x27;, 30, &#x27;Skipped: Test not implemented for rust-macaroons&#x27;)<br/></div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[pymacaroons-pymacaroons-pymacaroons]</td>
          <td class="col-duration">0.08</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[pymacaroons-pymacaroons-ruby-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[pymacaroons-pymacaroons-macaroons-js]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;pymacaroons&#x27;, macaroon_impl = &#x27;pymacaroons&#x27;, verify_impl = &#x27;macaroons-js&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>            macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        verify_command = &#x27;verify_third_party_macaroon&#x27;<br/>        verify_args = (<br/>            serialized_macaroon, bound_discharge, key,<br/>            first_party, discharge_first_party<br/>        )<br/>        verified, _ = execute_command(<br/>            verify_impl, verify_command, verify_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>&gt;       assert(verified == &quot;True&quot;)<br/><span class="error">E       assert &#x27;False&#x27; == &#x27;True&#x27;</span><br/><span class="error">E         - False</span><br/><span class="error">E         + True</span><br/><br/>tests/test_basic_compatibility.py:138: AssertionError<br/></div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[pymacaroons-pymacaroons-go-macaroon]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[pymacaroons-pymacaroons-php-macaroons]</td>
          <td class="col-duration">0.04</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;pymacaroons&#x27;, macaroon_impl = &#x27;pymacaroons&#x27;, verify_impl = &#x27;php-macaroons&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>            macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        verify_command = &#x27;verify_third_party_macaroon&#x27;<br/>        verify_args = (<br/>            serialized_macaroon, bound_discharge, key,<br/>            first_party, discharge_first_party<br/>        )<br/>        verified, _ = execute_command(<br/>&gt;           verify_impl, verify_command, verify_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/><br/>tests/test_basic_compatibility.py:135: <br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/>../lib/python3.4/functools.py:472: in wrapper<br/>    result = user_function(*args, **kwds)<br/>tests/test_basic_compatibility.py:27: in execute_command<br/>    return subprocess.check_output([path] + list(args))<br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/><br/>timeout = None<br/>popenargs = ([&#x27;implementations/php-macaroons/verify_third_party_macaroon&#x27;, &#x27;MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2...cnR5CjAwMmZzaWduYXR1cmUgB4E0TtjwF3uEhRN3uG4sD_I4pYPwZS1CjLLRBxVCLKsK&#x27;, &#x27;key&#x27;, &#x27;first_party&#x27;, &#x27;discharge_first_party&#x27;],), kwargs = {}<br/>inputdata = None, process = &lt;subprocess.Popen object at 0x7f5f25818438&gt;, output = b&#x27;&#x27;, unused_err = None, retcode = 255<br/><br/>    def check_output(*popenargs, timeout=None, **kwargs):<br/>        r&quot;&quot;&quot;Run command with arguments and return its output.<br/>    <br/>        If the exit code was non-zero it raises a CalledProcessError.  The<br/>        CalledProcessError object will have the return code in the returncode<br/>        attribute and output in the output attribute.<br/>    <br/>        The arguments are the same as for the Popen constructor.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;ls&quot;, &quot;-l&quot;, &quot;/dev/null&quot;])<br/>        b&#x27;crw-rw-rw- 1 root root 1, 3 Oct 18  2007 /dev/null\n&#x27;<br/>    <br/>        The stdout argument is not allowed as it is used internally.<br/>        To capture standard error in the result, use stderr=STDOUT.<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;/bin/sh&quot;, &quot;-c&quot;,<br/>        ...               &quot;ls -l non_existent_file ; exit 0&quot;],<br/>        ...              stderr=STDOUT)<br/>        b&#x27;ls: non_existent_file: No such file or directory\n&#x27;<br/>    <br/>        There is an additional optional argument, &quot;input&quot;, allowing you to<br/>        pass a string to the subprocess&#x27;s stdin.  If you use this argument<br/>        you may not also use the Popen constructor&#x27;s &quot;stdin&quot; argument, as<br/>        it too will be used internally.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;sed&quot;, &quot;-e&quot;, &quot;s/foo/bar/&quot;],<br/>        ...              input=b&quot;when in the course of fooman events\n&quot;)<br/>        b&#x27;when in the course of barman events\n&#x27;<br/>    <br/>        If universal_newlines=True is passed, the return value will be a<br/>        string rather than bytes.<br/>        &quot;&quot;&quot;<br/>        if &#x27;stdout&#x27; in kwargs:<br/>            raise ValueError(&#x27;stdout argument not allowed, it will be overridden.&#x27;)<br/>        if &#x27;input&#x27; in kwargs:<br/>            if &#x27;stdin&#x27; in kwargs:<br/>                raise ValueError(&#x27;stdin and input arguments may not both be used.&#x27;)<br/>            inputdata = kwargs[&#x27;input&#x27;]<br/>            del kwargs[&#x27;input&#x27;]<br/>            kwargs[&#x27;stdin&#x27;] = PIPE<br/>        else:<br/>            inputdata = None<br/>        with Popen(*popenargs, stdout=PIPE, **kwargs) as process:<br/>            try:<br/>                output, unused_err = process.communicate(inputdata, timeout=timeout)<br/>            except TimeoutExpired:<br/>                process.kill()<br/>                output, unused_err = process.communicate()<br/>                raise TimeoutExpired(process.args, timeout, output=output)<br/>            except:<br/>                process.kill()<br/>                process.wait()<br/>                raise<br/>            retcode = process.poll()<br/>            if retcode:<br/>&gt;               raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E               subprocess.CalledProcessError: Command &#x27;[&#x27;implementations/php-macaroons/verify_third_party_macaroon&#x27;, &#x27;MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2lkIGZpcnN0X3BhcnR5CjAwMTVjaWQgZGlzY2hhcmdlX2lkCjAwNTF2aWQgA_tVuQq4ATvRBoYpVaXIjYWBf3HQKm66ueDX21hqLwmYU-NTMOFXdEUNMckbtm1sp2AiScSiYrnK4qnPpdlRQ_t8h1jfq1JaCjAwMTVjbCBkaXNjaGFyZ2VfbG9jCjAwMmZzaWduYXR1cmUghgva_4h6kNXX_9faoWhKBYy7WwNixYw6BPHZvYUYuKAK&#x27;, &#x27;MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgB4E0TtjwF3uEhRN3uG4sD_I4pYPwZS1CjLLRBxVCLKsK&#x27;, &#x27;key&#x27;, &#x27;first_party&#x27;, &#x27;discharge_first_party&#x27;]&#x27; returned non-zero exit status 255</span><br/><br/>../lib/python3.4/subprocess.py:620: CalledProcessError<br/>----------------------------- Captured stderr call -----------------------------<br/>PHP Fatal error:  Undefined constant &apos;Sodium\CRYPTO_SECRETBOX_NONCEBYTES&apos; in /usr/src/implementations/php-macaroons/vendor/immense/macaroons/lib/Macaroons/Verifier.php on line 204
</div></td></tr>
        <tr class="skipped results-table-row">
          <td class="col-result">Skipped</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[pymacaroons-pymacaroons-rust-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">(&#x27;/usr/src/tests/test_basic_compatibility.py&#x27;, 30, &#x27;Skipped: Test not implemented for rust-macaroons&#x27;)<br/></div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[pymacaroons-ruby-macaroons-ruby-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[pymacaroons-ruby-macaroons-macaroons-js]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;pymacaroons&#x27;, macaroon_impl = &#x27;ruby-macaroons&#x27;, verify_impl = &#x27;macaroons-js&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>            macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        verify_command = &#x27;verify_third_party_macaroon&#x27;<br/>        verify_args = (<br/>            serialized_macaroon, bound_discharge, key,<br/>            first_party, discharge_first_party<br/>        )<br/>        verified, _ = execute_command(<br/>            verify_impl, verify_command, verify_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>&gt;       assert(verified == &quot;True&quot;)<br/><span class="error">E       assert &#x27;False&#x27; == &#x27;True&#x27;</span><br/><span class="error">E         - False</span><br/><span class="error">E         + True</span><br/><br/>tests/test_basic_compatibility.py:138: AssertionError<br/></div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[pymacaroons-ruby-macaroons-go-macaroon]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[pymacaroons-ruby-macaroons-php-macaroons]</td>
          <td class="col-duration">0.14</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;pymacaroons&#x27;, macaroon_impl = &#x27;ruby-macaroons&#x27;, verify_impl = &#x27;php-macaroons&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>            macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        verify_command = &#x27;verify_third_party_macaroon&#x27;<br/>        verify_args = (<br/>            serialized_macaroon, bound_discharge, key,<br/>            first_party, discharge_first_party<br/>        )<br/>        verified, _ = execute_command(<br/>&gt;           verify_impl, verify_command, verify_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/><br/>tests/test_basic_compatibility.py:135: <br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/>../lib/python3.4/functools.py:472: in wrapper<br/>    result = user_function(*args, **kwds)<br/>tests/test_basic_compatibility.py:27: in execute_command<br/>    return subprocess.check_output([path] + list(args))<br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/><br/>timeout = None<br/>popenargs = ([&#x27;implementations/php-macaroons/verify_third_party_macaroon&#x27;, &#x27;MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2...cnR5CjAwMmZzaWduYXR1cmUg1nxh0i0oUM6FEGn6sF80as_Trk5UPJpUsoeadPrz4hYK&#x27;, &#x27;key&#x27;, &#x27;first_party&#x27;, &#x27;discharge_first_party&#x27;],), kwargs = {}<br/>inputdata = None, process = &lt;subprocess.Popen object at 0x7f5f257f8ac8&gt;, output = b&#x27;&#x27;, unused_err = None, retcode = 255<br/><br/>    def check_output(*popenargs, timeout=None, **kwargs):<br/>        r&quot;&quot;&quot;Run command with arguments and return its output.<br/>    <br/>        If the exit code was non-zero it raises a CalledProcessError.  The<br/>        CalledProcessError object will have the return code in the returncode<br/>        attribute and output in the output attribute.<br/>    <br/>        The arguments are the same as for the Popen constructor.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;ls&quot;, &quot;-l&quot;, &quot;/dev/null&quot;])<br/>        b&#x27;crw-rw-rw- 1 root root 1, 3 Oct 18  2007 /dev/null\n&#x27;<br/>    <br/>        The stdout argument is not allowed as it is used internally.<br/>        To capture standard error in the result, use stderr=STDOUT.<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;/bin/sh&quot;, &quot;-c&quot;,<br/>        ...               &quot;ls -l non_existent_file ; exit 0&quot;],<br/>        ...              stderr=STDOUT)<br/>        b&#x27;ls: non_existent_file: No such file or directory\n&#x27;<br/>    <br/>        There is an additional optional argument, &quot;input&quot;, allowing you to<br/>        pass a string to the subprocess&#x27;s stdin.  If you use this argument<br/>        you may not also use the Popen constructor&#x27;s &quot;stdin&quot; argument, as<br/>        it too will be used internally.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;sed&quot;, &quot;-e&quot;, &quot;s/foo/bar/&quot;],<br/>        ...              input=b&quot;when in the course of fooman events\n&quot;)<br/>        b&#x27;when in the course of barman events\n&#x27;<br/>    <br/>        If universal_newlines=True is passed, the return value will be a<br/>        string rather than bytes.<br/>        &quot;&quot;&quot;<br/>        if &#x27;stdout&#x27; in kwargs:<br/>            raise ValueError(&#x27;stdout argument not allowed, it will be overridden.&#x27;)<br/>        if &#x27;input&#x27; in kwargs:<br/>            if &#x27;stdin&#x27; in kwargs:<br/>                raise ValueError(&#x27;stdin and input arguments may not both be used.&#x27;)<br/>            inputdata = kwargs[&#x27;input&#x27;]<br/>            del kwargs[&#x27;input&#x27;]<br/>            kwargs[&#x27;stdin&#x27;] = PIPE<br/>        else:<br/>            inputdata = None<br/>        with Popen(*popenargs, stdout=PIPE, **kwargs) as process:<br/>            try:<br/>                output, unused_err = process.communicate(inputdata, timeout=timeout)<br/>            except TimeoutExpired:<br/>                process.kill()<br/>                output, unused_err = process.communicate()<br/>                raise TimeoutExpired(process.args, timeout, output=output)<br/>            except:<br/>                process.kill()<br/>                process.wait()<br/>                raise<br/>            retcode = process.poll()<br/>            if retcode:<br/>&gt;               raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E               subprocess.CalledProcessError: Command &#x27;[&#x27;implementations/php-macaroons/verify_third_party_macaroon&#x27;, &#x27;MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2lkIGZpcnN0X3BhcnR5CjAwMTVjaWQgZGlzY2hhcmdlX2lkCjAwNTF2aWQgSwSk4AFjnK59Vk7h-gfjH5LKotcmv4msR--sqc5xhBy_b32W_PaB4g5MYZIyfn0pE7s2l0QuJzTJT0C3r5qPQB2wyZmc1KmaCjAwMTVjbCBkaXNjaGFyZ2VfbG9jCjAwMmZzaWduYXR1cmUgIZRROCMRe8uSnwoTeo0qZ8NAPVgJ5Vh_80MIF0hP8BwK&#x27;, &#x27;MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUg1nxh0i0oUM6FEGn6sF80as_Trk5UPJpUsoeadPrz4hYK&#x27;, &#x27;key&#x27;, &#x27;first_party&#x27;, &#x27;discharge_first_party&#x27;]&#x27; returned non-zero exit status 255</span><br/><br/>../lib/python3.4/subprocess.py:620: CalledProcessError<br/>----------------------------- Captured stderr call -----------------------------<br/>PHP Fatal error:  Undefined constant &apos;Sodium\CRYPTO_SECRETBOX_NONCEBYTES&apos; in /usr/src/implementations/php-macaroons/vendor/immense/macaroons/lib/Macaroons/Verifier.php on line 204
</div></td></tr>
        <tr class="skipped results-table-row">
          <td class="col-result">Skipped</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[pymacaroons-ruby-macaroons-rust-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">(&#x27;/usr/src/tests/test_basic_compatibility.py&#x27;, 30, &#x27;Skipped: Test not implemented for rust-macaroons&#x27;)<br/></div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[pymacaroons-macaroons-js-macaroons-js]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;pymacaroons&#x27;, macaroon_impl = &#x27;macaroons-js&#x27;, verify_impl = &#x27;macaroons-js&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>            macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        verify_command = &#x27;verify_third_party_macaroon&#x27;<br/>        verify_args = (<br/>            serialized_macaroon, bound_discharge, key,<br/>            first_party, discharge_first_party<br/>        )<br/>        verified, _ = execute_command(<br/>            verify_impl, verify_command, verify_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>&gt;       assert(verified == &quot;True&quot;)<br/><span class="error">E       assert &#x27;False&#x27; == &#x27;True&#x27;</span><br/><span class="error">E         - False</span><br/><span class="error">E         + True</span><br/><br/>tests/test_basic_compatibility.py:138: AssertionError<br/></div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[pymacaroons-macaroons-js-go-macaroon]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;pymacaroons&#x27;, macaroon_impl = &#x27;macaroons-js&#x27;, verify_impl = &#x27;go-macaroon&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>            macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        verify_command = &#x27;verify_third_party_macaroon&#x27;<br/>        verify_args = (<br/>            serialized_macaroon, bound_discharge, key,<br/>            first_party, discharge_first_party<br/>        )<br/>        verified, _ = execute_command(<br/>            verify_impl, verify_command, verify_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>&gt;       assert(verified == &quot;True&quot;)<br/><span class="error">E       assert &#x27;failed to de...ption failure&#x27; == &#x27;True&#x27;</span><br/><span class="error">E         - failed to decrypt caveat 1 signature: decryption failure</span><br/><span class="error">E         + True</span><br/><br/>tests/test_basic_compatibility.py:138: AssertionError<br/></div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[pymacaroons-macaroons-js-php-macaroons]</td>
          <td class="col-duration">0.04</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;pymacaroons&#x27;, macaroon_impl = &#x27;macaroons-js&#x27;, verify_impl = &#x27;php-macaroons&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>            macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        verify_command = &#x27;verify_third_party_macaroon&#x27;<br/>        verify_args = (<br/>            serialized_macaroon, bound_discharge, key,<br/>            first_party, discharge_first_party<br/>        )<br/>        verified, _ = execute_command(<br/>&gt;           verify_impl, verify_command, verify_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/><br/>tests/test_basic_compatibility.py:135: <br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/>../lib/python3.4/functools.py:472: in wrapper<br/>    result = user_function(*args, **kwds)<br/>tests/test_basic_compatibility.py:27: in execute_command<br/>    return subprocess.check_output([path] + list(args))<br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/><br/>timeout = None<br/>popenargs = ([&#x27;implementations/php-macaroons/verify_third_party_macaroon&#x27;, &#x27;MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2...cnR5CjAwMmZzaWduYXR1cmUgNddQgB0o9qjwddy5A7NGm1juaTGaU-Ov1fN9RS5j9iEK&#x27;, &#x27;key&#x27;, &#x27;first_party&#x27;, &#x27;discharge_first_party&#x27;],), kwargs = {}<br/>inputdata = None, process = &lt;subprocess.Popen object at 0x7f5f257c6a58&gt;, output = b&#x27;&#x27;, unused_err = None, retcode = 255<br/><br/>    def check_output(*popenargs, timeout=None, **kwargs):<br/>        r&quot;&quot;&quot;Run command with arguments and return its output.<br/>    <br/>        If the exit code was non-zero it raises a CalledProcessError.  The<br/>        CalledProcessError object will have the return code in the returncode<br/>        attribute and output in the output attribute.<br/>    <br/>        The arguments are the same as for the Popen constructor.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;ls&quot;, &quot;-l&quot;, &quot;/dev/null&quot;])<br/>        b&#x27;crw-rw-rw- 1 root root 1, 3 Oct 18  2007 /dev/null\n&#x27;<br/>    <br/>        The stdout argument is not allowed as it is used internally.<br/>        To capture standard error in the result, use stderr=STDOUT.<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;/bin/sh&quot;, &quot;-c&quot;,<br/>        ...               &quot;ls -l non_existent_file ; exit 0&quot;],<br/>        ...              stderr=STDOUT)<br/>        b&#x27;ls: non_existent_file: No such file or directory\n&#x27;<br/>    <br/>        There is an additional optional argument, &quot;input&quot;, allowing you to<br/>        pass a string to the subprocess&#x27;s stdin.  If you use this argument<br/>        you may not also use the Popen constructor&#x27;s &quot;stdin&quot; argument, as<br/>        it too will be used internally.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;sed&quot;, &quot;-e&quot;, &quot;s/foo/bar/&quot;],<br/>        ...              input=b&quot;when in the course of fooman events\n&quot;)<br/>        b&#x27;when in the course of barman events\n&#x27;<br/>    <br/>        If universal_newlines=True is passed, the return value will be a<br/>        string rather than bytes.<br/>        &quot;&quot;&quot;<br/>        if &#x27;stdout&#x27; in kwargs:<br/>            raise ValueError(&#x27;stdout argument not allowed, it will be overridden.&#x27;)<br/>        if &#x27;input&#x27; in kwargs:<br/>            if &#x27;stdin&#x27; in kwargs:<br/>                raise ValueError(&#x27;stdin and input arguments may not both be used.&#x27;)<br/>            inputdata = kwargs[&#x27;input&#x27;]<br/>            del kwargs[&#x27;input&#x27;]<br/>            kwargs[&#x27;stdin&#x27;] = PIPE<br/>        else:<br/>            inputdata = None<br/>        with Popen(*popenargs, stdout=PIPE, **kwargs) as process:<br/>            try:<br/>                output, unused_err = process.communicate(inputdata, timeout=timeout)<br/>            except TimeoutExpired:<br/>                process.kill()<br/>                output, unused_err = process.communicate()<br/>                raise TimeoutExpired(process.args, timeout, output=output)<br/>            except:<br/>                process.kill()<br/>                process.wait()<br/>                raise<br/>            retcode = process.poll()<br/>            if retcode:<br/>&gt;               raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E               subprocess.CalledProcessError: Command &#x27;[&#x27;implementations/php-macaroons/verify_third_party_macaroon&#x27;, &#x27;MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2lkIGZpcnN0X3BhcnR5CjAwMTVjaWQgZGlzY2hhcmdlX2lkCjAwNTF2aWQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACjAwMTVjbCBkaXNjaGFyZ2VfbG9jCjAwMmZzaWduYXR1cmUgJGZnHPI7E15-2tMskOtuGD5RBTK4x2Hf-e0VtoSm43cK&#x27;, &#x27;MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgNddQgB0o9qjwddy5A7NGm1juaTGaU-Ov1fN9RS5j9iEK&#x27;, &#x27;key&#x27;, &#x27;first_party&#x27;, &#x27;discharge_first_party&#x27;]&#x27; returned non-zero exit status 255</span><br/><br/>../lib/python3.4/subprocess.py:620: CalledProcessError<br/>----------------------------- Captured stderr call -----------------------------<br/>PHP Fatal error:  Undefined constant &apos;Sodium\CRYPTO_SECRETBOX_NONCEBYTES&apos; in /usr/src/implementations/php-macaroons/vendor/immense/macaroons/lib/Macaroons/Verifier.php on line 204
</div></td></tr>
        <tr class="skipped results-table-row">
          <td class="col-result">Skipped</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[pymacaroons-macaroons-js-rust-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">(&#x27;/usr/src/tests/test_basic_compatibility.py&#x27;, 30, &#x27;Skipped: Test not implemented for rust-macaroons&#x27;)<br/></div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[pymacaroons-go-macaroon-go-macaroon]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[pymacaroons-go-macaroon-php-macaroons]</td>
          <td class="col-duration">0.18</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;pymacaroons&#x27;, macaroon_impl = &#x27;go-macaroon&#x27;, verify_impl = &#x27;php-macaroons&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>            macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        verify_command = &#x27;verify_third_party_macaroon&#x27;<br/>        verify_args = (<br/>            serialized_macaroon, bound_discharge, key,<br/>            first_party, discharge_first_party<br/>        )<br/>        verified, _ = execute_command(<br/>&gt;           verify_impl, verify_command, verify_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/><br/>tests/test_basic_compatibility.py:135: <br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/>../lib/python3.4/functools.py:472: in wrapper<br/>    result = user_function(*args, **kwds)<br/>tests/test_basic_compatibility.py:27: in execute_command<br/>    return subprocess.check_output([path] + list(args))<br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/><br/>timeout = None<br/>popenargs = ([&#x27;implementations/php-macaroons/verify_third_party_macaroon&#x27;, &#x27;MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2...cnR5CjAwMmZzaWduYXR1cmUgjjR1B00v5oj9o_C_FEWvVqD1q8pk7j2RvzzsUFI1Dd4K&#x27;, &#x27;key&#x27;, &#x27;first_party&#x27;, &#x27;discharge_first_party&#x27;],), kwargs = {}<br/>inputdata = None, process = &lt;subprocess.Popen object at 0x7f5f2579dc18&gt;, output = b&#x27;&#x27;, unused_err = None, retcode = 255<br/><br/>    def check_output(*popenargs, timeout=None, **kwargs):<br/>        r&quot;&quot;&quot;Run command with arguments and return its output.<br/>    <br/>        If the exit code was non-zero it raises a CalledProcessError.  The<br/>        CalledProcessError object will have the return code in the returncode<br/>        attribute and output in the output attribute.<br/>    <br/>        The arguments are the same as for the Popen constructor.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;ls&quot;, &quot;-l&quot;, &quot;/dev/null&quot;])<br/>        b&#x27;crw-rw-rw- 1 root root 1, 3 Oct 18  2007 /dev/null\n&#x27;<br/>    <br/>        The stdout argument is not allowed as it is used internally.<br/>        To capture standard error in the result, use stderr=STDOUT.<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;/bin/sh&quot;, &quot;-c&quot;,<br/>        ...               &quot;ls -l non_existent_file ; exit 0&quot;],<br/>        ...              stderr=STDOUT)<br/>        b&#x27;ls: non_existent_file: No such file or directory\n&#x27;<br/>    <br/>        There is an additional optional argument, &quot;input&quot;, allowing you to<br/>        pass a string to the subprocess&#x27;s stdin.  If you use this argument<br/>        you may not also use the Popen constructor&#x27;s &quot;stdin&quot; argument, as<br/>        it too will be used internally.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;sed&quot;, &quot;-e&quot;, &quot;s/foo/bar/&quot;],<br/>        ...              input=b&quot;when in the course of fooman events\n&quot;)<br/>        b&#x27;when in the course of barman events\n&#x27;<br/>    <br/>        If universal_newlines=True is passed, the return value will be a<br/>        string rather than bytes.<br/>        &quot;&quot;&quot;<br/>        if &#x27;stdout&#x27; in kwargs:<br/>            raise ValueError(&#x27;stdout argument not allowed, it will be overridden.&#x27;)<br/>        if &#x27;input&#x27; in kwargs:<br/>            if &#x27;stdin&#x27; in kwargs:<br/>                raise ValueError(&#x27;stdin and input arguments may not both be used.&#x27;)<br/>            inputdata = kwargs[&#x27;input&#x27;]<br/>            del kwargs[&#x27;input&#x27;]<br/>            kwargs[&#x27;stdin&#x27;] = PIPE<br/>        else:<br/>            inputdata = None<br/>        with Popen(*popenargs, stdout=PIPE, **kwargs) as process:<br/>            try:<br/>                output, unused_err = process.communicate(inputdata, timeout=timeout)<br/>            except TimeoutExpired:<br/>                process.kill()<br/>                output, unused_err = process.communicate()<br/>                raise TimeoutExpired(process.args, timeout, output=output)<br/>            except:<br/>                process.kill()<br/>                process.wait()<br/>                raise<br/>            retcode = process.poll()<br/>            if retcode:<br/>&gt;               raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E               subprocess.CalledProcessError: Command &#x27;[&#x27;implementations/php-macaroons/verify_third_party_macaroon&#x27;, &#x27;MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2lkIGZpcnN0X3BhcnR5CjAwMTVjaWQgZGlzY2hhcmdlX2lkCjAwNTF2aWQgPUhWrZl6yEAFa7xjWnnf0_MxYvwDjv2g7XWYq1Z3woDnXZ9OrHyYvLG_Vkq30_e4ZMW_jDsR_uuqA-GCILDiQq03ymvbP2lOCjAwMTVjbCBkaXNjaGFyZ2VfbG9jCjAwMmZzaWduYXR1cmUgRyl7u2x3FzGRMjlC_8yZ6DdMvfsrBLKxsPDcUOz4YnkK&#x27;, &#x27;MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgjjR1B00v5oj9o_C_FEWvVqD1q8pk7j2RvzzsUFI1Dd4K&#x27;, &#x27;key&#x27;, &#x27;first_party&#x27;, &#x27;discharge_first_party&#x27;]&#x27; returned non-zero exit status 255</span><br/><br/>../lib/python3.4/subprocess.py:620: CalledProcessError<br/>----------------------------- Captured stderr call -----------------------------<br/>PHP Fatal error:  Undefined constant &apos;Sodium\CRYPTO_SECRETBOX_NONCEBYTES&apos; in /usr/src/implementations/php-macaroons/vendor/immense/macaroons/lib/Macaroons/Verifier.php on line 204
</div></td></tr>
        <tr class="skipped results-table-row">
          <td class="col-result">Skipped</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[pymacaroons-go-macaroon-rust-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">(&#x27;/usr/src/tests/test_basic_compatibility.py&#x27;, 30, &#x27;Skipped: Test not implemented for rust-macaroons&#x27;)<br/></div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[pymacaroons-php-macaroons-php-macaroons]</td>
          <td class="col-duration">0.09</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;pymacaroons&#x27;, macaroon_impl = &#x27;php-macaroons&#x27;, verify_impl = &#x27;php-macaroons&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>&gt;           macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/><br/>tests/test_basic_compatibility.py:126: <br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/>../lib/python3.4/functools.py:472: in wrapper<br/>    result = user_function(*args, **kwds)<br/>tests/test_basic_compatibility.py:27: in execute_command<br/>    return subprocess.check_output([path] + list(args))<br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/><br/>timeout = None, popenargs = ([&#x27;implementations/php-macaroons/third_party_macaroon_serialized&#x27;, &#x27;loc&#x27;, &#x27;key&#x27;, &#x27;id&#x27;, &#x27;first_party&#x27;, &#x27;discharge_loc&#x27;, ...],), kwargs = {}, inputdata = None, process = &lt;subprocess.Popen object at 0x7f5f257ae710&gt;, output = b&#x27;&#x27;<br/>unused_err = None, retcode = 255<br/><br/>    def check_output(*popenargs, timeout=None, **kwargs):<br/>        r&quot;&quot;&quot;Run command with arguments and return its output.<br/>    <br/>        If the exit code was non-zero it raises a CalledProcessError.  The<br/>        CalledProcessError object will have the return code in the returncode<br/>        attribute and output in the output attribute.<br/>    <br/>        The arguments are the same as for the Popen constructor.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;ls&quot;, &quot;-l&quot;, &quot;/dev/null&quot;])<br/>        b&#x27;crw-rw-rw- 1 root root 1, 3 Oct 18  2007 /dev/null\n&#x27;<br/>    <br/>        The stdout argument is not allowed as it is used internally.<br/>        To capture standard error in the result, use stderr=STDOUT.<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;/bin/sh&quot;, &quot;-c&quot;,<br/>        ...               &quot;ls -l non_existent_file ; exit 0&quot;],<br/>        ...              stderr=STDOUT)<br/>        b&#x27;ls: non_existent_file: No such file or directory\n&#x27;<br/>    <br/>        There is an additional optional argument, &quot;input&quot;, allowing you to<br/>        pass a string to the subprocess&#x27;s stdin.  If you use this argument<br/>        you may not also use the Popen constructor&#x27;s &quot;stdin&quot; argument, as<br/>        it too will be used internally.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;sed&quot;, &quot;-e&quot;, &quot;s/foo/bar/&quot;],<br/>        ...              input=b&quot;when in the course of fooman events\n&quot;)<br/>        b&#x27;when in the course of barman events\n&#x27;<br/>    <br/>        If universal_newlines=True is passed, the return value will be a<br/>        string rather than bytes.<br/>        &quot;&quot;&quot;<br/>        if &#x27;stdout&#x27; in kwargs:<br/>            raise ValueError(&#x27;stdout argument not allowed, it will be overridden.&#x27;)<br/>        if &#x27;input&#x27; in kwargs:<br/>            if &#x27;stdin&#x27; in kwargs:<br/>                raise ValueError(&#x27;stdin and input arguments may not both be used.&#x27;)<br/>            inputdata = kwargs[&#x27;input&#x27;]<br/>            del kwargs[&#x27;input&#x27;]<br/>            kwargs[&#x27;stdin&#x27;] = PIPE<br/>        else:<br/>            inputdata = None<br/>        with Popen(*popenargs, stdout=PIPE, **kwargs) as process:<br/>            try:<br/>                output, unused_err = process.communicate(inputdata, timeout=timeout)<br/>            except TimeoutExpired:<br/>                process.kill()<br/>                output, unused_err = process.communicate()<br/>                raise TimeoutExpired(process.args, timeout, output=output)<br/>            except:<br/>                process.kill()<br/>                process.wait()<br/>                raise<br/>            retcode = process.poll()<br/>            if retcode:<br/>&gt;               raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E               subprocess.CalledProcessError: Command &#x27;[&#x27;implementations/php-macaroons/third_party_macaroon_serialized&#x27;, &#x27;loc&#x27;, &#x27;key&#x27;, &#x27;id&#x27;, &#x27;first_party&#x27;, &#x27;discharge_loc&#x27;, &#x27;discharge_key&#x27;, &#x27;discharge_id&#x27;, &#x27;MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgZMyVaQHSRRPRQPl7S1zgIHnbz6lrtAFr-42xmzq5P5IK&#x27;]&#x27; returned non-zero exit status 255</span><br/><br/>../lib/python3.4/subprocess.py:620: CalledProcessError<br/>----------------------------- Captured stderr call -----------------------------<br/>PHP Fatal error:  Call to undefined function Sodium\randombytes_buf() in /usr/src/implementations/php-macaroons/vendor/immense/macaroons/lib/Macaroons/Macaroon.php on line 78
</div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[pymacaroons-php-macaroons-rust-macaroons]</td>
          <td class="col-duration">0.05</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;pymacaroons&#x27;, macaroon_impl = &#x27;php-macaroons&#x27;, verify_impl = &#x27;rust-macaroons&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>&gt;           macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/><br/>tests/test_basic_compatibility.py:126: <br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/>../lib/python3.4/functools.py:472: in wrapper<br/>    result = user_function(*args, **kwds)<br/>tests/test_basic_compatibility.py:27: in execute_command<br/>    return subprocess.check_output([path] + list(args))<br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/><br/>timeout = None, popenargs = ([&#x27;implementations/php-macaroons/third_party_macaroon_serialized&#x27;, &#x27;loc&#x27;, &#x27;key&#x27;, &#x27;id&#x27;, &#x27;first_party&#x27;, &#x27;discharge_loc&#x27;, ...],), kwargs = {}, inputdata = None, process = &lt;subprocess.Popen object at 0x7f5f255e1588&gt;, output = b&#x27;&#x27;<br/>unused_err = None, retcode = 255<br/><br/>    def check_output(*popenargs, timeout=None, **kwargs):<br/>        r&quot;&quot;&quot;Run command with arguments and return its output.<br/>    <br/>        If the exit code was non-zero it raises a CalledProcessError.  The<br/>        CalledProcessError object will have the return code in the returncode<br/>        attribute and output in the output attribute.<br/>    <br/>        The arguments are the same as for the Popen constructor.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;ls&quot;, &quot;-l&quot;, &quot;/dev/null&quot;])<br/>        b&#x27;crw-rw-rw- 1 root root 1, 3 Oct 18  2007 /dev/null\n&#x27;<br/>    <br/>        The stdout argument is not allowed as it is used internally.<br/>        To capture standard error in the result, use stderr=STDOUT.<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;/bin/sh&quot;, &quot;-c&quot;,<br/>        ...               &quot;ls -l non_existent_file ; exit 0&quot;],<br/>        ...              stderr=STDOUT)<br/>        b&#x27;ls: non_existent_file: No such file or directory\n&#x27;<br/>    <br/>        There is an additional optional argument, &quot;input&quot;, allowing you to<br/>        pass a string to the subprocess&#x27;s stdin.  If you use this argument<br/>        you may not also use the Popen constructor&#x27;s &quot;stdin&quot; argument, as<br/>        it too will be used internally.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;sed&quot;, &quot;-e&quot;, &quot;s/foo/bar/&quot;],<br/>        ...              input=b&quot;when in the course of fooman events\n&quot;)<br/>        b&#x27;when in the course of barman events\n&#x27;<br/>    <br/>        If universal_newlines=True is passed, the return value will be a<br/>        string rather than bytes.<br/>        &quot;&quot;&quot;<br/>        if &#x27;stdout&#x27; in kwargs:<br/>            raise ValueError(&#x27;stdout argument not allowed, it will be overridden.&#x27;)<br/>        if &#x27;input&#x27; in kwargs:<br/>            if &#x27;stdin&#x27; in kwargs:<br/>                raise ValueError(&#x27;stdin and input arguments may not both be used.&#x27;)<br/>            inputdata = kwargs[&#x27;input&#x27;]<br/>            del kwargs[&#x27;input&#x27;]<br/>            kwargs[&#x27;stdin&#x27;] = PIPE<br/>        else:<br/>            inputdata = None<br/>        with Popen(*popenargs, stdout=PIPE, **kwargs) as process:<br/>            try:<br/>                output, unused_err = process.communicate(inputdata, timeout=timeout)<br/>            except TimeoutExpired:<br/>                process.kill()<br/>                output, unused_err = process.communicate()<br/>                raise TimeoutExpired(process.args, timeout, output=output)<br/>            except:<br/>                process.kill()<br/>                process.wait()<br/>                raise<br/>            retcode = process.poll()<br/>            if retcode:<br/>&gt;               raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E               subprocess.CalledProcessError: Command &#x27;[&#x27;implementations/php-macaroons/third_party_macaroon_serialized&#x27;, &#x27;loc&#x27;, &#x27;key&#x27;, &#x27;id&#x27;, &#x27;first_party&#x27;, &#x27;discharge_loc&#x27;, &#x27;discharge_key&#x27;, &#x27;discharge_id&#x27;, &#x27;MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgZMyVaQHSRRPRQPl7S1zgIHnbz6lrtAFr-42xmzq5P5IK&#x27;]&#x27; returned non-zero exit status 255</span><br/><br/>../lib/python3.4/subprocess.py:620: CalledProcessError<br/>----------------------------- Captured stderr call -----------------------------<br/>PHP Fatal error:  Call to undefined function Sodium\randombytes_buf() in /usr/src/implementations/php-macaroons/vendor/immense/macaroons/lib/Macaroons/Macaroon.php on line 78
</div></td></tr>
        <tr class="skipped results-table-row">
          <td class="col-result">Skipped</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[pymacaroons-rust-macaroons-rust-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">(&#x27;/usr/src/tests/test_basic_compatibility.py&#x27;, 30, &#x27;Skipped: Test not implemented for rust-macaroons&#x27;)<br/></div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[ruby-macaroons-ruby-macaroons-ruby-macaroons]</td>
          <td class="col-duration">0.20</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[ruby-macaroons-ruby-macaroons-macaroons-js]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;ruby-macaroons&#x27;, macaroon_impl = &#x27;ruby-macaroons&#x27;, verify_impl = &#x27;macaroons-js&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>            macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        verify_command = &#x27;verify_third_party_macaroon&#x27;<br/>        verify_args = (<br/>            serialized_macaroon, bound_discharge, key,<br/>            first_party, discharge_first_party<br/>        )<br/>        verified, _ = execute_command(<br/>            verify_impl, verify_command, verify_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>&gt;       assert(verified == &quot;True&quot;)<br/><span class="error">E       assert &#x27;False&#x27; == &#x27;True&#x27;</span><br/><span class="error">E         - False</span><br/><span class="error">E         + True</span><br/><br/>tests/test_basic_compatibility.py:138: AssertionError<br/></div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[ruby-macaroons-ruby-macaroons-go-macaroon]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[ruby-macaroons-ruby-macaroons-php-macaroons]</td>
          <td class="col-duration">0.13</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;ruby-macaroons&#x27;, macaroon_impl = &#x27;ruby-macaroons&#x27;, verify_impl = &#x27;php-macaroons&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>            macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        verify_command = &#x27;verify_third_party_macaroon&#x27;<br/>        verify_args = (<br/>            serialized_macaroon, bound_discharge, key,<br/>            first_party, discharge_first_party<br/>        )<br/>        verified, _ = execute_command(<br/>&gt;           verify_impl, verify_command, verify_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/><br/>tests/test_basic_compatibility.py:135: <br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/>../lib/python3.4/functools.py:472: in wrapper<br/>    result = user_function(*args, **kwds)<br/>tests/test_basic_compatibility.py:27: in execute_command<br/>    return subprocess.check_output([path] + list(args))<br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/><br/>timeout = None<br/>popenargs = ([&#x27;implementations/php-macaroons/verify_third_party_macaroon&#x27;, &#x27;MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2...cnR5CjAwMmZzaWduYXR1cmUg1nxh0i0oUM6FEGn6sF80as_Trk5UPJpUsoeadPrz4hYK&#x27;, &#x27;key&#x27;, &#x27;first_party&#x27;, &#x27;discharge_first_party&#x27;],), kwargs = {}<br/>inputdata = None, process = &lt;subprocess.Popen object at 0x7f5f2561cc50&gt;, output = b&#x27;&#x27;, unused_err = None, retcode = 255<br/><br/>    def check_output(*popenargs, timeout=None, **kwargs):<br/>        r&quot;&quot;&quot;Run command with arguments and return its output.<br/>    <br/>        If the exit code was non-zero it raises a CalledProcessError.  The<br/>        CalledProcessError object will have the return code in the returncode<br/>        attribute and output in the output attribute.<br/>    <br/>        The arguments are the same as for the Popen constructor.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;ls&quot;, &quot;-l&quot;, &quot;/dev/null&quot;])<br/>        b&#x27;crw-rw-rw- 1 root root 1, 3 Oct 18  2007 /dev/null\n&#x27;<br/>    <br/>        The stdout argument is not allowed as it is used internally.<br/>        To capture standard error in the result, use stderr=STDOUT.<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;/bin/sh&quot;, &quot;-c&quot;,<br/>        ...               &quot;ls -l non_existent_file ; exit 0&quot;],<br/>        ...              stderr=STDOUT)<br/>        b&#x27;ls: non_existent_file: No such file or directory\n&#x27;<br/>    <br/>        There is an additional optional argument, &quot;input&quot;, allowing you to<br/>        pass a string to the subprocess&#x27;s stdin.  If you use this argument<br/>        you may not also use the Popen constructor&#x27;s &quot;stdin&quot; argument, as<br/>        it too will be used internally.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;sed&quot;, &quot;-e&quot;, &quot;s/foo/bar/&quot;],<br/>        ...              input=b&quot;when in the course of fooman events\n&quot;)<br/>        b&#x27;when in the course of barman events\n&#x27;<br/>    <br/>        If universal_newlines=True is passed, the return value will be a<br/>        string rather than bytes.<br/>        &quot;&quot;&quot;<br/>        if &#x27;stdout&#x27; in kwargs:<br/>            raise ValueError(&#x27;stdout argument not allowed, it will be overridden.&#x27;)<br/>        if &#x27;input&#x27; in kwargs:<br/>            if &#x27;stdin&#x27; in kwargs:<br/>                raise ValueError(&#x27;stdin and input arguments may not both be used.&#x27;)<br/>            inputdata = kwargs[&#x27;input&#x27;]<br/>            del kwargs[&#x27;input&#x27;]<br/>            kwargs[&#x27;stdin&#x27;] = PIPE<br/>        else:<br/>            inputdata = None<br/>        with Popen(*popenargs, stdout=PIPE, **kwargs) as process:<br/>            try:<br/>                output, unused_err = process.communicate(inputdata, timeout=timeout)<br/>            except TimeoutExpired:<br/>                process.kill()<br/>                output, unused_err = process.communicate()<br/>                raise TimeoutExpired(process.args, timeout, output=output)<br/>            except:<br/>                process.kill()<br/>                process.wait()<br/>                raise<br/>            retcode = process.poll()<br/>            if retcode:<br/>&gt;               raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E               subprocess.CalledProcessError: Command &#x27;[&#x27;implementations/php-macaroons/verify_third_party_macaroon&#x27;, &#x27;MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2lkIGZpcnN0X3BhcnR5CjAwMTVjaWQgZGlzY2hhcmdlX2lkCjAwNTF2aWQgSwSk4AFjnK59Vk7h-gfjH5LKotcmv4msR--sqc5xhBy_b32W_PaB4g5MYZIyfn0pE7s2l0QuJzTJT0C3r5qPQB2wyZmc1KmaCjAwMTVjbCBkaXNjaGFyZ2VfbG9jCjAwMmZzaWduYXR1cmUgIZRROCMRe8uSnwoTeo0qZ8NAPVgJ5Vh_80MIF0hP8BwK&#x27;, &#x27;MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUg1nxh0i0oUM6FEGn6sF80as_Trk5UPJpUsoeadPrz4hYK&#x27;, &#x27;key&#x27;, &#x27;first_party&#x27;, &#x27;discharge_first_party&#x27;]&#x27; returned non-zero exit status 255</span><br/><br/>../lib/python3.4/subprocess.py:620: CalledProcessError<br/>----------------------------- Captured stderr call -----------------------------<br/>PHP Fatal error:  Undefined constant &apos;Sodium\CRYPTO_SECRETBOX_NONCEBYTES&apos; in /usr/src/implementations/php-macaroons/vendor/immense/macaroons/lib/Macaroons/Verifier.php on line 204
</div></td></tr>
        <tr class="skipped results-table-row">
          <td class="col-result">Skipped</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[ruby-macaroons-ruby-macaroons-rust-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">(&#x27;/usr/src/tests/test_basic_compatibility.py&#x27;, 30, &#x27;Skipped: Test not implemented for rust-macaroons&#x27;)<br/></div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[ruby-macaroons-macaroons-js-macaroons-js]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;ruby-macaroons&#x27;, macaroon_impl = &#x27;macaroons-js&#x27;, verify_impl = &#x27;macaroons-js&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>            macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        verify_command = &#x27;verify_third_party_macaroon&#x27;<br/>        verify_args = (<br/>            serialized_macaroon, bound_discharge, key,<br/>            first_party, discharge_first_party<br/>        )<br/>        verified, _ = execute_command(<br/>            verify_impl, verify_command, verify_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>&gt;       assert(verified == &quot;True&quot;)<br/><span class="error">E       assert &#x27;False&#x27; == &#x27;True&#x27;</span><br/><span class="error">E         - False</span><br/><span class="error">E         + True</span><br/><br/>tests/test_basic_compatibility.py:138: AssertionError<br/></div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[ruby-macaroons-macaroons-js-go-macaroon]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;ruby-macaroons&#x27;, macaroon_impl = &#x27;macaroons-js&#x27;, verify_impl = &#x27;go-macaroon&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>            macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        verify_command = &#x27;verify_third_party_macaroon&#x27;<br/>        verify_args = (<br/>            serialized_macaroon, bound_discharge, key,<br/>            first_party, discharge_first_party<br/>        )<br/>        verified, _ = execute_command(<br/>            verify_impl, verify_command, verify_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>&gt;       assert(verified == &quot;True&quot;)<br/><span class="error">E       assert &#x27;failed to de...ption failure&#x27; == &#x27;True&#x27;</span><br/><span class="error">E         - failed to decrypt caveat 1 signature: decryption failure</span><br/><span class="error">E         + True</span><br/><br/>tests/test_basic_compatibility.py:138: AssertionError<br/></div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[ruby-macaroons-macaroons-js-php-macaroons]</td>
          <td class="col-duration">0.09</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;ruby-macaroons&#x27;, macaroon_impl = &#x27;macaroons-js&#x27;, verify_impl = &#x27;php-macaroons&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>            macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        verify_command = &#x27;verify_third_party_macaroon&#x27;<br/>        verify_args = (<br/>            serialized_macaroon, bound_discharge, key,<br/>            first_party, discharge_first_party<br/>        )<br/>        verified, _ = execute_command(<br/>&gt;           verify_impl, verify_command, verify_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/><br/>tests/test_basic_compatibility.py:135: <br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/>../lib/python3.4/functools.py:472: in wrapper<br/>    result = user_function(*args, **kwds)<br/>tests/test_basic_compatibility.py:27: in execute_command<br/>    return subprocess.check_output([path] + list(args))<br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/><br/>timeout = None<br/>popenargs = ([&#x27;implementations/php-macaroons/verify_third_party_macaroon&#x27;, &#x27;MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2...cnR5CjAwMmZzaWduYXR1cmUgNddQgB0o9qjwddy5A7NGm1juaTGaU-Ov1fN9RS5j9iEK&#x27;, &#x27;key&#x27;, &#x27;first_party&#x27;, &#x27;discharge_first_party&#x27;],), kwargs = {}<br/>inputdata = None, process = &lt;subprocess.Popen object at 0x7f5f25602940&gt;, output = b&#x27;&#x27;, unused_err = None, retcode = 255<br/><br/>    def check_output(*popenargs, timeout=None, **kwargs):<br/>        r&quot;&quot;&quot;Run command with arguments and return its output.<br/>    <br/>        If the exit code was non-zero it raises a CalledProcessError.  The<br/>        CalledProcessError object will have the return code in the returncode<br/>        attribute and output in the output attribute.<br/>    <br/>        The arguments are the same as for the Popen constructor.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;ls&quot;, &quot;-l&quot;, &quot;/dev/null&quot;])<br/>        b&#x27;crw-rw-rw- 1 root root 1, 3 Oct 18  2007 /dev/null\n&#x27;<br/>    <br/>        The stdout argument is not allowed as it is used internally.<br/>        To capture standard error in the result, use stderr=STDOUT.<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;/bin/sh&quot;, &quot;-c&quot;,<br/>        ...               &quot;ls -l non_existent_file ; exit 0&quot;],<br/>        ...              stderr=STDOUT)<br/>        b&#x27;ls: non_existent_file: No such file or directory\n&#x27;<br/>    <br/>        There is an additional optional argument, &quot;input&quot;, allowing you to<br/>        pass a string to the subprocess&#x27;s stdin.  If you use this argument<br/>        you may not also use the Popen constructor&#x27;s &quot;stdin&quot; argument, as<br/>        it too will be used internally.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;sed&quot;, &quot;-e&quot;, &quot;s/foo/bar/&quot;],<br/>        ...              input=b&quot;when in the course of fooman events\n&quot;)<br/>        b&#x27;when in the course of barman events\n&#x27;<br/>    <br/>        If universal_newlines=True is passed, the return value will be a<br/>        string rather than bytes.<br/>        &quot;&quot;&quot;<br/>        if &#x27;stdout&#x27; in kwargs:<br/>            raise ValueError(&#x27;stdout argument not allowed, it will be overridden.&#x27;)<br/>        if &#x27;input&#x27; in kwargs:<br/>            if &#x27;stdin&#x27; in kwargs:<br/>                raise ValueError(&#x27;stdin and input arguments may not both be used.&#x27;)<br/>            inputdata = kwargs[&#x27;input&#x27;]<br/>            del kwargs[&#x27;input&#x27;]<br/>            kwargs[&#x27;stdin&#x27;] = PIPE<br/>        else:<br/>            inputdata = None<br/>        with Popen(*popenargs, stdout=PIPE, **kwargs) as process:<br/>            try:<br/>                output, unused_err = process.communicate(inputdata, timeout=timeout)<br/>            except TimeoutExpired:<br/>                process.kill()<br/>                output, unused_err = process.communicate()<br/>                raise TimeoutExpired(process.args, timeout, output=output)<br/>            except:<br/>                process.kill()<br/>                process.wait()<br/>                raise<br/>            retcode = process.poll()<br/>            if retcode:<br/>&gt;               raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E               subprocess.CalledProcessError: Command &#x27;[&#x27;implementations/php-macaroons/verify_third_party_macaroon&#x27;, &#x27;MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2lkIGZpcnN0X3BhcnR5CjAwMTVjaWQgZGlzY2hhcmdlX2lkCjAwNTF2aWQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACjAwMTVjbCBkaXNjaGFyZ2VfbG9jCjAwMmZzaWduYXR1cmUgJGZnHPI7E15-2tMskOtuGD5RBTK4x2Hf-e0VtoSm43cK&#x27;, &#x27;MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgNddQgB0o9qjwddy5A7NGm1juaTGaU-Ov1fN9RS5j9iEK&#x27;, &#x27;key&#x27;, &#x27;first_party&#x27;, &#x27;discharge_first_party&#x27;]&#x27; returned non-zero exit status 255</span><br/><br/>../lib/python3.4/subprocess.py:620: CalledProcessError<br/>----------------------------- Captured stderr call -----------------------------<br/>PHP Fatal error:  Undefined constant &apos;Sodium\CRYPTO_SECRETBOX_NONCEBYTES&apos; in /usr/src/implementations/php-macaroons/vendor/immense/macaroons/lib/Macaroons/Verifier.php on line 204
</div></td></tr>
        <tr class="skipped results-table-row">
          <td class="col-result">Skipped</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[ruby-macaroons-macaroons-js-rust-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">(&#x27;/usr/src/tests/test_basic_compatibility.py&#x27;, 30, &#x27;Skipped: Test not implemented for rust-macaroons&#x27;)<br/></div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[ruby-macaroons-go-macaroon-go-macaroon]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[ruby-macaroons-go-macaroon-php-macaroons]</td>
          <td class="col-duration">0.08</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;ruby-macaroons&#x27;, macaroon_impl = &#x27;go-macaroon&#x27;, verify_impl = &#x27;php-macaroons&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>            macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        verify_command = &#x27;verify_third_party_macaroon&#x27;<br/>        verify_args = (<br/>            serialized_macaroon, bound_discharge, key,<br/>            first_party, discharge_first_party<br/>        )<br/>        verified, _ = execute_command(<br/>&gt;           verify_impl, verify_command, verify_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/><br/>tests/test_basic_compatibility.py:135: <br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/>../lib/python3.4/functools.py:472: in wrapper<br/>    result = user_function(*args, **kwds)<br/>tests/test_basic_compatibility.py:27: in execute_command<br/>    return subprocess.check_output([path] + list(args))<br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/><br/>timeout = None<br/>popenargs = ([&#x27;implementations/php-macaroons/verify_third_party_macaroon&#x27;, &#x27;MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2...cnR5CjAwMmZzaWduYXR1cmUgjjR1B00v5oj9o_C_FEWvVqD1q8pk7j2RvzzsUFI1Dd4K&#x27;, &#x27;key&#x27;, &#x27;first_party&#x27;, &#x27;discharge_first_party&#x27;],), kwargs = {}<br/>inputdata = None, process = &lt;subprocess.Popen object at 0x7f5f25626358&gt;, output = b&#x27;&#x27;, unused_err = None, retcode = 255<br/><br/>    def check_output(*popenargs, timeout=None, **kwargs):<br/>        r&quot;&quot;&quot;Run command with arguments and return its output.<br/>    <br/>        If the exit code was non-zero it raises a CalledProcessError.  The<br/>        CalledProcessError object will have the return code in the returncode<br/>        attribute and output in the output attribute.<br/>    <br/>        The arguments are the same as for the Popen constructor.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;ls&quot;, &quot;-l&quot;, &quot;/dev/null&quot;])<br/>        b&#x27;crw-rw-rw- 1 root root 1, 3 Oct 18  2007 /dev/null\n&#x27;<br/>    <br/>        The stdout argument is not allowed as it is used internally.<br/>        To capture standard error in the result, use stderr=STDOUT.<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;/bin/sh&quot;, &quot;-c&quot;,<br/>        ...               &quot;ls -l non_existent_file ; exit 0&quot;],<br/>        ...              stderr=STDOUT)<br/>        b&#x27;ls: non_existent_file: No such file or directory\n&#x27;<br/>    <br/>        There is an additional optional argument, &quot;input&quot;, allowing you to<br/>        pass a string to the subprocess&#x27;s stdin.  If you use this argument<br/>        you may not also use the Popen constructor&#x27;s &quot;stdin&quot; argument, as<br/>        it too will be used internally.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;sed&quot;, &quot;-e&quot;, &quot;s/foo/bar/&quot;],<br/>        ...              input=b&quot;when in the course of fooman events\n&quot;)<br/>        b&#x27;when in the course of barman events\n&#x27;<br/>    <br/>        If universal_newlines=True is passed, the return value will be a<br/>        string rather than bytes.<br/>        &quot;&quot;&quot;<br/>        if &#x27;stdout&#x27; in kwargs:<br/>            raise ValueError(&#x27;stdout argument not allowed, it will be overridden.&#x27;)<br/>        if &#x27;input&#x27; in kwargs:<br/>            if &#x27;stdin&#x27; in kwargs:<br/>                raise ValueError(&#x27;stdin and input arguments may not both be used.&#x27;)<br/>            inputdata = kwargs[&#x27;input&#x27;]<br/>            del kwargs[&#x27;input&#x27;]<br/>            kwargs[&#x27;stdin&#x27;] = PIPE<br/>        else:<br/>            inputdata = None<br/>        with Popen(*popenargs, stdout=PIPE, **kwargs) as process:<br/>            try:<br/>                output, unused_err = process.communicate(inputdata, timeout=timeout)<br/>            except TimeoutExpired:<br/>                process.kill()<br/>                output, unused_err = process.communicate()<br/>                raise TimeoutExpired(process.args, timeout, output=output)<br/>            except:<br/>                process.kill()<br/>                process.wait()<br/>                raise<br/>            retcode = process.poll()<br/>            if retcode:<br/>&gt;               raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E               subprocess.CalledProcessError: Command &#x27;[&#x27;implementations/php-macaroons/verify_third_party_macaroon&#x27;, &#x27;MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2lkIGZpcnN0X3BhcnR5CjAwMTVjaWQgZGlzY2hhcmdlX2lkCjAwNTF2aWQgPUhWrZl6yEAFa7xjWnnf0_MxYvwDjv2g7XWYq1Z3woDnXZ9OrHyYvLG_Vkq30_e4ZMW_jDsR_uuqA-GCILDiQq03ymvbP2lOCjAwMTVjbCBkaXNjaGFyZ2VfbG9jCjAwMmZzaWduYXR1cmUgRyl7u2x3FzGRMjlC_8yZ6DdMvfsrBLKxsPDcUOz4YnkK&#x27;, &#x27;MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgjjR1B00v5oj9o_C_FEWvVqD1q8pk7j2RvzzsUFI1Dd4K&#x27;, &#x27;key&#x27;, &#x27;first_party&#x27;, &#x27;discharge_first_party&#x27;]&#x27; returned non-zero exit status 255</span><br/><br/>../lib/python3.4/subprocess.py:620: CalledProcessError<br/>----------------------------- Captured stderr call -----------------------------<br/>PHP Fatal error:  Undefined constant &apos;Sodium\CRYPTO_SECRETBOX_NONCEBYTES&apos; in /usr/src/implementations/php-macaroons/vendor/immense/macaroons/lib/Macaroons/Verifier.php on line 204
</div></td></tr>
        <tr class="skipped results-table-row">
          <td class="col-result">Skipped</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[ruby-macaroons-go-macaroon-rust-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">(&#x27;/usr/src/tests/test_basic_compatibility.py&#x27;, 30, &#x27;Skipped: Test not implemented for rust-macaroons&#x27;)<br/></div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[ruby-macaroons-php-macaroons-php-macaroons]</td>
          <td class="col-duration">0.05</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;ruby-macaroons&#x27;, macaroon_impl = &#x27;php-macaroons&#x27;, verify_impl = &#x27;php-macaroons&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>&gt;           macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/><br/>tests/test_basic_compatibility.py:126: <br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/>../lib/python3.4/functools.py:472: in wrapper<br/>    result = user_function(*args, **kwds)<br/>tests/test_basic_compatibility.py:27: in execute_command<br/>    return subprocess.check_output([path] + list(args))<br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/><br/>timeout = None, popenargs = ([&#x27;implementations/php-macaroons/third_party_macaroon_serialized&#x27;, &#x27;loc&#x27;, &#x27;key&#x27;, &#x27;id&#x27;, &#x27;first_party&#x27;, &#x27;discharge_loc&#x27;, ...],), kwargs = {}, inputdata = None, process = &lt;subprocess.Popen object at 0x7f5f2561de48&gt;, output = b&#x27;&#x27;<br/>unused_err = None, retcode = 255<br/><br/>    def check_output(*popenargs, timeout=None, **kwargs):<br/>        r&quot;&quot;&quot;Run command with arguments and return its output.<br/>    <br/>        If the exit code was non-zero it raises a CalledProcessError.  The<br/>        CalledProcessError object will have the return code in the returncode<br/>        attribute and output in the output attribute.<br/>    <br/>        The arguments are the same as for the Popen constructor.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;ls&quot;, &quot;-l&quot;, &quot;/dev/null&quot;])<br/>        b&#x27;crw-rw-rw- 1 root root 1, 3 Oct 18  2007 /dev/null\n&#x27;<br/>    <br/>        The stdout argument is not allowed as it is used internally.<br/>        To capture standard error in the result, use stderr=STDOUT.<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;/bin/sh&quot;, &quot;-c&quot;,<br/>        ...               &quot;ls -l non_existent_file ; exit 0&quot;],<br/>        ...              stderr=STDOUT)<br/>        b&#x27;ls: non_existent_file: No such file or directory\n&#x27;<br/>    <br/>        There is an additional optional argument, &quot;input&quot;, allowing you to<br/>        pass a string to the subprocess&#x27;s stdin.  If you use this argument<br/>        you may not also use the Popen constructor&#x27;s &quot;stdin&quot; argument, as<br/>        it too will be used internally.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;sed&quot;, &quot;-e&quot;, &quot;s/foo/bar/&quot;],<br/>        ...              input=b&quot;when in the course of fooman events\n&quot;)<br/>        b&#x27;when in the course of barman events\n&#x27;<br/>    <br/>        If universal_newlines=True is passed, the return value will be a<br/>        string rather than bytes.<br/>        &quot;&quot;&quot;<br/>        if &#x27;stdout&#x27; in kwargs:<br/>            raise ValueError(&#x27;stdout argument not allowed, it will be overridden.&#x27;)<br/>        if &#x27;input&#x27; in kwargs:<br/>            if &#x27;stdin&#x27; in kwargs:<br/>                raise ValueError(&#x27;stdin and input arguments may not both be used.&#x27;)<br/>            inputdata = kwargs[&#x27;input&#x27;]<br/>            del kwargs[&#x27;input&#x27;]<br/>            kwargs[&#x27;stdin&#x27;] = PIPE<br/>        else:<br/>            inputdata = None<br/>        with Popen(*popenargs, stdout=PIPE, **kwargs) as process:<br/>            try:<br/>                output, unused_err = process.communicate(inputdata, timeout=timeout)<br/>            except TimeoutExpired:<br/>                process.kill()<br/>                output, unused_err = process.communicate()<br/>                raise TimeoutExpired(process.args, timeout, output=output)<br/>            except:<br/>                process.kill()<br/>                process.wait()<br/>                raise<br/>            retcode = process.poll()<br/>            if retcode:<br/>&gt;               raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E               subprocess.CalledProcessError: Command &#x27;[&#x27;implementations/php-macaroons/third_party_macaroon_serialized&#x27;, &#x27;loc&#x27;, &#x27;key&#x27;, &#x27;id&#x27;, &#x27;first_party&#x27;, &#x27;discharge_loc&#x27;, &#x27;discharge_key&#x27;, &#x27;discharge_id&#x27;, &#x27;MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgZMyVaQHSRRPRQPl7S1zgIHnbz6lrtAFr-42xmzq5P5IK&#x27;]&#x27; returned non-zero exit status 255</span><br/><br/>../lib/python3.4/subprocess.py:620: CalledProcessError<br/>----------------------------- Captured stderr call -----------------------------<br/>PHP Fatal error:  Call to undefined function Sodium\randombytes_buf() in /usr/src/implementations/php-macaroons/vendor/immense/macaroons/lib/Macaroons/Macaroon.php on line 78
</div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[ruby-macaroons-php-macaroons-rust-macaroons]</td>
          <td class="col-duration">0.17</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;ruby-macaroons&#x27;, macaroon_impl = &#x27;php-macaroons&#x27;, verify_impl = &#x27;rust-macaroons&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>&gt;           macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/><br/>tests/test_basic_compatibility.py:126: <br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/>../lib/python3.4/functools.py:472: in wrapper<br/>    result = user_function(*args, **kwds)<br/>tests/test_basic_compatibility.py:27: in execute_command<br/>    return subprocess.check_output([path] + list(args))<br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/><br/>timeout = None, popenargs = ([&#x27;implementations/php-macaroons/third_party_macaroon_serialized&#x27;, &#x27;loc&#x27;, &#x27;key&#x27;, &#x27;id&#x27;, &#x27;first_party&#x27;, &#x27;discharge_loc&#x27;, ...],), kwargs = {}, inputdata = None, process = &lt;subprocess.Popen object at 0x7f5f2562ae48&gt;, output = b&#x27;&#x27;<br/>unused_err = None, retcode = 255<br/><br/>    def check_output(*popenargs, timeout=None, **kwargs):<br/>        r&quot;&quot;&quot;Run command with arguments and return its output.<br/>    <br/>        If the exit code was non-zero it raises a CalledProcessError.  The<br/>        CalledProcessError object will have the return code in the returncode<br/>        attribute and output in the output attribute.<br/>    <br/>        The arguments are the same as for the Popen constructor.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;ls&quot;, &quot;-l&quot;, &quot;/dev/null&quot;])<br/>        b&#x27;crw-rw-rw- 1 root root 1, 3 Oct 18  2007 /dev/null\n&#x27;<br/>    <br/>        The stdout argument is not allowed as it is used internally.<br/>        To capture standard error in the result, use stderr=STDOUT.<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;/bin/sh&quot;, &quot;-c&quot;,<br/>        ...               &quot;ls -l non_existent_file ; exit 0&quot;],<br/>        ...              stderr=STDOUT)<br/>        b&#x27;ls: non_existent_file: No such file or directory\n&#x27;<br/>    <br/>        There is an additional optional argument, &quot;input&quot;, allowing you to<br/>        pass a string to the subprocess&#x27;s stdin.  If you use this argument<br/>        you may not also use the Popen constructor&#x27;s &quot;stdin&quot; argument, as<br/>        it too will be used internally.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;sed&quot;, &quot;-e&quot;, &quot;s/foo/bar/&quot;],<br/>        ...              input=b&quot;when in the course of fooman events\n&quot;)<br/>        b&#x27;when in the course of barman events\n&#x27;<br/>    <br/>        If universal_newlines=True is passed, the return value will be a<br/>        string rather than bytes.<br/>        &quot;&quot;&quot;<br/>        if &#x27;stdout&#x27; in kwargs:<br/>            raise ValueError(&#x27;stdout argument not allowed, it will be overridden.&#x27;)<br/>        if &#x27;input&#x27; in kwargs:<br/>            if &#x27;stdin&#x27; in kwargs:<br/>                raise ValueError(&#x27;stdin and input arguments may not both be used.&#x27;)<br/>            inputdata = kwargs[&#x27;input&#x27;]<br/>            del kwargs[&#x27;input&#x27;]<br/>            kwargs[&#x27;stdin&#x27;] = PIPE<br/>        else:<br/>            inputdata = None<br/>        with Popen(*popenargs, stdout=PIPE, **kwargs) as process:<br/>            try:<br/>                output, unused_err = process.communicate(inputdata, timeout=timeout)<br/>            except TimeoutExpired:<br/>                process.kill()<br/>                output, unused_err = process.communicate()<br/>                raise TimeoutExpired(process.args, timeout, output=output)<br/>            except:<br/>                process.kill()<br/>                process.wait()<br/>                raise<br/>            retcode = process.poll()<br/>            if retcode:<br/>&gt;               raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E               subprocess.CalledProcessError: Command &#x27;[&#x27;implementations/php-macaroons/third_party_macaroon_serialized&#x27;, &#x27;loc&#x27;, &#x27;key&#x27;, &#x27;id&#x27;, &#x27;first_party&#x27;, &#x27;discharge_loc&#x27;, &#x27;discharge_key&#x27;, &#x27;discharge_id&#x27;, &#x27;MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgZMyVaQHSRRPRQPl7S1zgIHnbz6lrtAFr-42xmzq5P5IK&#x27;]&#x27; returned non-zero exit status 255</span><br/><br/>../lib/python3.4/subprocess.py:620: CalledProcessError<br/>----------------------------- Captured stderr call -----------------------------<br/>PHP Fatal error:  Call to undefined function Sodium\randombytes_buf() in /usr/src/implementations/php-macaroons/vendor/immense/macaroons/lib/Macaroons/Macaroon.php on line 78
</div></td></tr>
        <tr class="skipped results-table-row">
          <td class="col-result">Skipped</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[ruby-macaroons-rust-macaroons-rust-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">(&#x27;/usr/src/tests/test_basic_compatibility.py&#x27;, 30, &#x27;Skipped: Test not implemented for rust-macaroons&#x27;)<br/></div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[macaroons-js-macaroons-js-macaroons-js]</td>
          <td class="col-duration">0.17</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;macaroons-js&#x27;, macaroon_impl = &#x27;macaroons-js&#x27;, verify_impl = &#x27;macaroons-js&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>            macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        verify_command = &#x27;verify_third_party_macaroon&#x27;<br/>        verify_args = (<br/>            serialized_macaroon, bound_discharge, key,<br/>            first_party, discharge_first_party<br/>        )<br/>        verified, _ = execute_command(<br/>            verify_impl, verify_command, verify_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>&gt;       assert(verified == &quot;True&quot;)<br/><span class="error">E       assert &#x27;False&#x27; == &#x27;True&#x27;</span><br/><span class="error">E         - False</span><br/><span class="error">E         + True</span><br/><br/>tests/test_basic_compatibility.py:138: AssertionError<br/></div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[macaroons-js-macaroons-js-go-macaroon]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;macaroons-js&#x27;, macaroon_impl = &#x27;macaroons-js&#x27;, verify_impl = &#x27;go-macaroon&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>            macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        verify_command = &#x27;verify_third_party_macaroon&#x27;<br/>        verify_args = (<br/>            serialized_macaroon, bound_discharge, key,<br/>            first_party, discharge_first_party<br/>        )<br/>        verified, _ = execute_command(<br/>            verify_impl, verify_command, verify_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>&gt;       assert(verified == &quot;True&quot;)<br/><span class="error">E       assert &#x27;failed to de...ption failure&#x27; == &#x27;True&#x27;</span><br/><span class="error">E         - failed to decrypt caveat 1 signature: decryption failure</span><br/><span class="error">E         + True</span><br/><br/>tests/test_basic_compatibility.py:138: AssertionError<br/></div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[macaroons-js-macaroons-js-php-macaroons]</td>
          <td class="col-duration">0.18</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;macaroons-js&#x27;, macaroon_impl = &#x27;macaroons-js&#x27;, verify_impl = &#x27;php-macaroons&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>            macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        verify_command = &#x27;verify_third_party_macaroon&#x27;<br/>        verify_args = (<br/>            serialized_macaroon, bound_discharge, key,<br/>            first_party, discharge_first_party<br/>        )<br/>        verified, _ = execute_command(<br/>&gt;           verify_impl, verify_command, verify_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/><br/>tests/test_basic_compatibility.py:135: <br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/>../lib/python3.4/functools.py:472: in wrapper<br/>    result = user_function(*args, **kwds)<br/>tests/test_basic_compatibility.py:27: in execute_command<br/>    return subprocess.check_output([path] + list(args))<br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/><br/>timeout = None<br/>popenargs = ([&#x27;implementations/php-macaroons/verify_third_party_macaroon&#x27;, &#x27;MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2...cnR5CjAwMmZzaWduYXR1cmUgNddQgB0o9qjwddy5A7NGm1juaTGaU-Ov1fN9RS5j9iEK&#x27;, &#x27;key&#x27;, &#x27;first_party&#x27;, &#x27;discharge_first_party&#x27;],), kwargs = {}<br/>inputdata = None, process = &lt;subprocess.Popen object at 0x7f5f25712a58&gt;, output = b&#x27;&#x27;, unused_err = None, retcode = 255<br/><br/>    def check_output(*popenargs, timeout=None, **kwargs):<br/>        r&quot;&quot;&quot;Run command with arguments and return its output.<br/>    <br/>        If the exit code was non-zero it raises a CalledProcessError.  The<br/>        CalledProcessError object will have the return code in the returncode<br/>        attribute and output in the output attribute.<br/>    <br/>        The arguments are the same as for the Popen constructor.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;ls&quot;, &quot;-l&quot;, &quot;/dev/null&quot;])<br/>        b&#x27;crw-rw-rw- 1 root root 1, 3 Oct 18  2007 /dev/null\n&#x27;<br/>    <br/>        The stdout argument is not allowed as it is used internally.<br/>        To capture standard error in the result, use stderr=STDOUT.<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;/bin/sh&quot;, &quot;-c&quot;,<br/>        ...               &quot;ls -l non_existent_file ; exit 0&quot;],<br/>        ...              stderr=STDOUT)<br/>        b&#x27;ls: non_existent_file: No such file or directory\n&#x27;<br/>    <br/>        There is an additional optional argument, &quot;input&quot;, allowing you to<br/>        pass a string to the subprocess&#x27;s stdin.  If you use this argument<br/>        you may not also use the Popen constructor&#x27;s &quot;stdin&quot; argument, as<br/>        it too will be used internally.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;sed&quot;, &quot;-e&quot;, &quot;s/foo/bar/&quot;],<br/>        ...              input=b&quot;when in the course of fooman events\n&quot;)<br/>        b&#x27;when in the course of barman events\n&#x27;<br/>    <br/>        If universal_newlines=True is passed, the return value will be a<br/>        string rather than bytes.<br/>        &quot;&quot;&quot;<br/>        if &#x27;stdout&#x27; in kwargs:<br/>            raise ValueError(&#x27;stdout argument not allowed, it will be overridden.&#x27;)<br/>        if &#x27;input&#x27; in kwargs:<br/>            if &#x27;stdin&#x27; in kwargs:<br/>                raise ValueError(&#x27;stdin and input arguments may not both be used.&#x27;)<br/>            inputdata = kwargs[&#x27;input&#x27;]<br/>            del kwargs[&#x27;input&#x27;]<br/>            kwargs[&#x27;stdin&#x27;] = PIPE<br/>        else:<br/>            inputdata = None<br/>        with Popen(*popenargs, stdout=PIPE, **kwargs) as process:<br/>            try:<br/>                output, unused_err = process.communicate(inputdata, timeout=timeout)<br/>            except TimeoutExpired:<br/>                process.kill()<br/>                output, unused_err = process.communicate()<br/>                raise TimeoutExpired(process.args, timeout, output=output)<br/>            except:<br/>                process.kill()<br/>                process.wait()<br/>                raise<br/>            retcode = process.poll()<br/>            if retcode:<br/>&gt;               raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E               subprocess.CalledProcessError: Command &#x27;[&#x27;implementations/php-macaroons/verify_third_party_macaroon&#x27;, &#x27;MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2lkIGZpcnN0X3BhcnR5CjAwMTVjaWQgZGlzY2hhcmdlX2lkCjAwNTF2aWQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACjAwMTVjbCBkaXNjaGFyZ2VfbG9jCjAwMmZzaWduYXR1cmUgJGZnHPI7E15-2tMskOtuGD5RBTK4x2Hf-e0VtoSm43cK&#x27;, &#x27;MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgNddQgB0o9qjwddy5A7NGm1juaTGaU-Ov1fN9RS5j9iEK&#x27;, &#x27;key&#x27;, &#x27;first_party&#x27;, &#x27;discharge_first_party&#x27;]&#x27; returned non-zero exit status 255</span><br/><br/>../lib/python3.4/subprocess.py:620: CalledProcessError<br/>----------------------------- Captured stderr call -----------------------------<br/>PHP Fatal error:  Undefined constant &apos;Sodium\CRYPTO_SECRETBOX_NONCEBYTES&apos; in /usr/src/implementations/php-macaroons/vendor/immense/macaroons/lib/Macaroons/Verifier.php on line 204
</div></td></tr>
        <tr class="skipped results-table-row">
          <td class="col-result">Skipped</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[macaroons-js-macaroons-js-rust-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">(&#x27;/usr/src/tests/test_basic_compatibility.py&#x27;, 30, &#x27;Skipped: Test not implemented for rust-macaroons&#x27;)<br/></div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[macaroons-js-go-macaroon-go-macaroon]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[macaroons-js-go-macaroon-php-macaroons]</td>
          <td class="col-duration">0.05</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;macaroons-js&#x27;, macaroon_impl = &#x27;go-macaroon&#x27;, verify_impl = &#x27;php-macaroons&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>            macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        verify_command = &#x27;verify_third_party_macaroon&#x27;<br/>        verify_args = (<br/>            serialized_macaroon, bound_discharge, key,<br/>            first_party, discharge_first_party<br/>        )<br/>        verified, _ = execute_command(<br/>&gt;           verify_impl, verify_command, verify_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/><br/>tests/test_basic_compatibility.py:135: <br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/>../lib/python3.4/functools.py:472: in wrapper<br/>    result = user_function(*args, **kwds)<br/>tests/test_basic_compatibility.py:27: in execute_command<br/>    return subprocess.check_output([path] + list(args))<br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/><br/>timeout = None<br/>popenargs = ([&#x27;implementations/php-macaroons/verify_third_party_macaroon&#x27;, &#x27;MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2...cnR5CjAwMmZzaWduYXR1cmUgjjR1B00v5oj9o_C_FEWvVqD1q8pk7j2RvzzsUFI1Dd4K&#x27;, &#x27;key&#x27;, &#x27;first_party&#x27;, &#x27;discharge_first_party&#x27;],), kwargs = {}<br/>inputdata = None, process = &lt;subprocess.Popen object at 0x7f5f256e6d30&gt;, output = b&#x27;&#x27;, unused_err = None, retcode = 255<br/><br/>    def check_output(*popenargs, timeout=None, **kwargs):<br/>        r&quot;&quot;&quot;Run command with arguments and return its output.<br/>    <br/>        If the exit code was non-zero it raises a CalledProcessError.  The<br/>        CalledProcessError object will have the return code in the returncode<br/>        attribute and output in the output attribute.<br/>    <br/>        The arguments are the same as for the Popen constructor.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;ls&quot;, &quot;-l&quot;, &quot;/dev/null&quot;])<br/>        b&#x27;crw-rw-rw- 1 root root 1, 3 Oct 18  2007 /dev/null\n&#x27;<br/>    <br/>        The stdout argument is not allowed as it is used internally.<br/>        To capture standard error in the result, use stderr=STDOUT.<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;/bin/sh&quot;, &quot;-c&quot;,<br/>        ...               &quot;ls -l non_existent_file ; exit 0&quot;],<br/>        ...              stderr=STDOUT)<br/>        b&#x27;ls: non_existent_file: No such file or directory\n&#x27;<br/>    <br/>        There is an additional optional argument, &quot;input&quot;, allowing you to<br/>        pass a string to the subprocess&#x27;s stdin.  If you use this argument<br/>        you may not also use the Popen constructor&#x27;s &quot;stdin&quot; argument, as<br/>        it too will be used internally.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;sed&quot;, &quot;-e&quot;, &quot;s/foo/bar/&quot;],<br/>        ...              input=b&quot;when in the course of fooman events\n&quot;)<br/>        b&#x27;when in the course of barman events\n&#x27;<br/>    <br/>        If universal_newlines=True is passed, the return value will be a<br/>        string rather than bytes.<br/>        &quot;&quot;&quot;<br/>        if &#x27;stdout&#x27; in kwargs:<br/>            raise ValueError(&#x27;stdout argument not allowed, it will be overridden.&#x27;)<br/>        if &#x27;input&#x27; in kwargs:<br/>            if &#x27;stdin&#x27; in kwargs:<br/>                raise ValueError(&#x27;stdin and input arguments may not both be used.&#x27;)<br/>            inputdata = kwargs[&#x27;input&#x27;]<br/>            del kwargs[&#x27;input&#x27;]<br/>            kwargs[&#x27;stdin&#x27;] = PIPE<br/>        else:<br/>            inputdata = None<br/>        with Popen(*popenargs, stdout=PIPE, **kwargs) as process:<br/>            try:<br/>                output, unused_err = process.communicate(inputdata, timeout=timeout)<br/>            except TimeoutExpired:<br/>                process.kill()<br/>                output, unused_err = process.communicate()<br/>                raise TimeoutExpired(process.args, timeout, output=output)<br/>            except:<br/>                process.kill()<br/>                process.wait()<br/>                raise<br/>            retcode = process.poll()<br/>            if retcode:<br/>&gt;               raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E               subprocess.CalledProcessError: Command &#x27;[&#x27;implementations/php-macaroons/verify_third_party_macaroon&#x27;, &#x27;MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2lkIGZpcnN0X3BhcnR5CjAwMTVjaWQgZGlzY2hhcmdlX2lkCjAwNTF2aWQgPUhWrZl6yEAFa7xjWnnf0_MxYvwDjv2g7XWYq1Z3woDnXZ9OrHyYvLG_Vkq30_e4ZMW_jDsR_uuqA-GCILDiQq03ymvbP2lOCjAwMTVjbCBkaXNjaGFyZ2VfbG9jCjAwMmZzaWduYXR1cmUgRyl7u2x3FzGRMjlC_8yZ6DdMvfsrBLKxsPDcUOz4YnkK&#x27;, &#x27;MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgjjR1B00v5oj9o_C_FEWvVqD1q8pk7j2RvzzsUFI1Dd4K&#x27;, &#x27;key&#x27;, &#x27;first_party&#x27;, &#x27;discharge_first_party&#x27;]&#x27; returned non-zero exit status 255</span><br/><br/>../lib/python3.4/subprocess.py:620: CalledProcessError<br/>----------------------------- Captured stderr call -----------------------------<br/>PHP Fatal error:  Undefined constant &apos;Sodium\CRYPTO_SECRETBOX_NONCEBYTES&apos; in /usr/src/implementations/php-macaroons/vendor/immense/macaroons/lib/Macaroons/Verifier.php on line 204
</div></td></tr>
        <tr class="skipped results-table-row">
          <td class="col-result">Skipped</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[macaroons-js-go-macaroon-rust-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">(&#x27;/usr/src/tests/test_basic_compatibility.py&#x27;, 30, &#x27;Skipped: Test not implemented for rust-macaroons&#x27;)<br/></div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[macaroons-js-php-macaroons-php-macaroons]</td>
          <td class="col-duration">0.14</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;macaroons-js&#x27;, macaroon_impl = &#x27;php-macaroons&#x27;, verify_impl = &#x27;php-macaroons&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>&gt;           macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/><br/>tests/test_basic_compatibility.py:126: <br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/>../lib/python3.4/functools.py:472: in wrapper<br/>    result = user_function(*args, **kwds)<br/>tests/test_basic_compatibility.py:27: in execute_command<br/>    return subprocess.check_output([path] + list(args))<br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/><br/>timeout = None, popenargs = ([&#x27;implementations/php-macaroons/third_party_macaroon_serialized&#x27;, &#x27;loc&#x27;, &#x27;key&#x27;, &#x27;id&#x27;, &#x27;first_party&#x27;, &#x27;discharge_loc&#x27;, ...],), kwargs = {}, inputdata = None, process = &lt;subprocess.Popen object at 0x7f5f25707860&gt;, output = b&#x27;&#x27;<br/>unused_err = None, retcode = 255<br/><br/>    def check_output(*popenargs, timeout=None, **kwargs):<br/>        r&quot;&quot;&quot;Run command with arguments and return its output.<br/>    <br/>        If the exit code was non-zero it raises a CalledProcessError.  The<br/>        CalledProcessError object will have the return code in the returncode<br/>        attribute and output in the output attribute.<br/>    <br/>        The arguments are the same as for the Popen constructor.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;ls&quot;, &quot;-l&quot;, &quot;/dev/null&quot;])<br/>        b&#x27;crw-rw-rw- 1 root root 1, 3 Oct 18  2007 /dev/null\n&#x27;<br/>    <br/>        The stdout argument is not allowed as it is used internally.<br/>        To capture standard error in the result, use stderr=STDOUT.<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;/bin/sh&quot;, &quot;-c&quot;,<br/>        ...               &quot;ls -l non_existent_file ; exit 0&quot;],<br/>        ...              stderr=STDOUT)<br/>        b&#x27;ls: non_existent_file: No such file or directory\n&#x27;<br/>    <br/>        There is an additional optional argument, &quot;input&quot;, allowing you to<br/>        pass a string to the subprocess&#x27;s stdin.  If you use this argument<br/>        you may not also use the Popen constructor&#x27;s &quot;stdin&quot; argument, as<br/>        it too will be used internally.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;sed&quot;, &quot;-e&quot;, &quot;s/foo/bar/&quot;],<br/>        ...              input=b&quot;when in the course of fooman events\n&quot;)<br/>        b&#x27;when in the course of barman events\n&#x27;<br/>    <br/>        If universal_newlines=True is passed, the return value will be a<br/>        string rather than bytes.<br/>        &quot;&quot;&quot;<br/>        if &#x27;stdout&#x27; in kwargs:<br/>            raise ValueError(&#x27;stdout argument not allowed, it will be overridden.&#x27;)<br/>        if &#x27;input&#x27; in kwargs:<br/>            if &#x27;stdin&#x27; in kwargs:<br/>                raise ValueError(&#x27;stdin and input arguments may not both be used.&#x27;)<br/>            inputdata = kwargs[&#x27;input&#x27;]<br/>            del kwargs[&#x27;input&#x27;]<br/>            kwargs[&#x27;stdin&#x27;] = PIPE<br/>        else:<br/>            inputdata = None<br/>        with Popen(*popenargs, stdout=PIPE, **kwargs) as process:<br/>            try:<br/>                output, unused_err = process.communicate(inputdata, timeout=timeout)<br/>            except TimeoutExpired:<br/>                process.kill()<br/>                output, unused_err = process.communicate()<br/>                raise TimeoutExpired(process.args, timeout, output=output)<br/>            except:<br/>                process.kill()<br/>                process.wait()<br/>                raise<br/>            retcode = process.poll()<br/>            if retcode:<br/>&gt;               raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E               subprocess.CalledProcessError: Command &#x27;[&#x27;implementations/php-macaroons/third_party_macaroon_serialized&#x27;, &#x27;loc&#x27;, &#x27;key&#x27;, &#x27;id&#x27;, &#x27;first_party&#x27;, &#x27;discharge_loc&#x27;, &#x27;discharge_key&#x27;, &#x27;discharge_id&#x27;, &#x27;MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgZMyVaQHSRRPRQPl7S1zgIHnbz6lrtAFr-42xmzq5P5IK&#x27;]&#x27; returned non-zero exit status 255</span><br/><br/>../lib/python3.4/subprocess.py:620: CalledProcessError<br/>----------------------------- Captured stderr call -----------------------------<br/>PHP Fatal error:  Call to undefined function Sodium\randombytes_buf() in /usr/src/implementations/php-macaroons/vendor/immense/macaroons/lib/Macaroons/Macaroon.php on line 78
</div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[macaroons-js-php-macaroons-rust-macaroons]</td>
          <td class="col-duration">0.07</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;macaroons-js&#x27;, macaroon_impl = &#x27;php-macaroons&#x27;, verify_impl = &#x27;rust-macaroons&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>&gt;           macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/><br/>tests/test_basic_compatibility.py:126: <br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/>../lib/python3.4/functools.py:472: in wrapper<br/>    result = user_function(*args, **kwds)<br/>tests/test_basic_compatibility.py:27: in execute_command<br/>    return subprocess.check_output([path] + list(args))<br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/><br/>timeout = None, popenargs = ([&#x27;implementations/php-macaroons/third_party_macaroon_serialized&#x27;, &#x27;loc&#x27;, &#x27;key&#x27;, &#x27;id&#x27;, &#x27;first_party&#x27;, &#x27;discharge_loc&#x27;, ...],), kwargs = {}, inputdata = None, process = &lt;subprocess.Popen object at 0x7f5f256f39b0&gt;, output = b&#x27;&#x27;<br/>unused_err = None, retcode = 255<br/><br/>    def check_output(*popenargs, timeout=None, **kwargs):<br/>        r&quot;&quot;&quot;Run command with arguments and return its output.<br/>    <br/>        If the exit code was non-zero it raises a CalledProcessError.  The<br/>        CalledProcessError object will have the return code in the returncode<br/>        attribute and output in the output attribute.<br/>    <br/>        The arguments are the same as for the Popen constructor.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;ls&quot;, &quot;-l&quot;, &quot;/dev/null&quot;])<br/>        b&#x27;crw-rw-rw- 1 root root 1, 3 Oct 18  2007 /dev/null\n&#x27;<br/>    <br/>        The stdout argument is not allowed as it is used internally.<br/>        To capture standard error in the result, use stderr=STDOUT.<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;/bin/sh&quot;, &quot;-c&quot;,<br/>        ...               &quot;ls -l non_existent_file ; exit 0&quot;],<br/>        ...              stderr=STDOUT)<br/>        b&#x27;ls: non_existent_file: No such file or directory\n&#x27;<br/>    <br/>        There is an additional optional argument, &quot;input&quot;, allowing you to<br/>        pass a string to the subprocess&#x27;s stdin.  If you use this argument<br/>        you may not also use the Popen constructor&#x27;s &quot;stdin&quot; argument, as<br/>        it too will be used internally.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;sed&quot;, &quot;-e&quot;, &quot;s/foo/bar/&quot;],<br/>        ...              input=b&quot;when in the course of fooman events\n&quot;)<br/>        b&#x27;when in the course of barman events\n&#x27;<br/>    <br/>        If universal_newlines=True is passed, the return value will be a<br/>        string rather than bytes.<br/>        &quot;&quot;&quot;<br/>        if &#x27;stdout&#x27; in kwargs:<br/>            raise ValueError(&#x27;stdout argument not allowed, it will be overridden.&#x27;)<br/>        if &#x27;input&#x27; in kwargs:<br/>            if &#x27;stdin&#x27; in kwargs:<br/>                raise ValueError(&#x27;stdin and input arguments may not both be used.&#x27;)<br/>            inputdata = kwargs[&#x27;input&#x27;]<br/>            del kwargs[&#x27;input&#x27;]<br/>            kwargs[&#x27;stdin&#x27;] = PIPE<br/>        else:<br/>            inputdata = None<br/>        with Popen(*popenargs, stdout=PIPE, **kwargs) as process:<br/>            try:<br/>                output, unused_err = process.communicate(inputdata, timeout=timeout)<br/>            except TimeoutExpired:<br/>                process.kill()<br/>                output, unused_err = process.communicate()<br/>                raise TimeoutExpired(process.args, timeout, output=output)<br/>            except:<br/>                process.kill()<br/>                process.wait()<br/>                raise<br/>            retcode = process.poll()<br/>            if retcode:<br/>&gt;               raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E               subprocess.CalledProcessError: Command &#x27;[&#x27;implementations/php-macaroons/third_party_macaroon_serialized&#x27;, &#x27;loc&#x27;, &#x27;key&#x27;, &#x27;id&#x27;, &#x27;first_party&#x27;, &#x27;discharge_loc&#x27;, &#x27;discharge_key&#x27;, &#x27;discharge_id&#x27;, &#x27;MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgZMyVaQHSRRPRQPl7S1zgIHnbz6lrtAFr-42xmzq5P5IK&#x27;]&#x27; returned non-zero exit status 255</span><br/><br/>../lib/python3.4/subprocess.py:620: CalledProcessError<br/>----------------------------- Captured stderr call -----------------------------<br/>PHP Fatal error:  Call to undefined function Sodium\randombytes_buf() in /usr/src/implementations/php-macaroons/vendor/immense/macaroons/lib/Macaroons/Macaroon.php on line 78
</div></td></tr>
        <tr class="skipped results-table-row">
          <td class="col-result">Skipped</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[macaroons-js-rust-macaroons-rust-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">(&#x27;/usr/src/tests/test_basic_compatibility.py&#x27;, 30, &#x27;Skipped: Test not implemented for rust-macaroons&#x27;)<br/></div></td></tr>
        <tr class="passed results-table-row">
          <td class="col-result">Passed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[go-macaroon-go-macaroon-go-macaroon]</td>
          <td class="col-duration">0.63</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="empty log">No log output captured.</div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[go-macaroon-go-macaroon-php-macaroons]</td>
          <td class="col-duration">0.16</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;go-macaroon&#x27;, macaroon_impl = &#x27;go-macaroon&#x27;, verify_impl = &#x27;php-macaroons&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>            macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        verify_command = &#x27;verify_third_party_macaroon&#x27;<br/>        verify_args = (<br/>            serialized_macaroon, bound_discharge, key,<br/>            first_party, discharge_first_party<br/>        )<br/>        verified, _ = execute_command(<br/>&gt;           verify_impl, verify_command, verify_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/><br/>tests/test_basic_compatibility.py:135: <br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/>../lib/python3.4/functools.py:472: in wrapper<br/>    result = user_function(*args, **kwds)<br/>tests/test_basic_compatibility.py:27: in execute_command<br/>    return subprocess.check_output([path] + list(args))<br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/><br/>timeout = None<br/>popenargs = ([&#x27;implementations/php-macaroons/verify_third_party_macaroon&#x27;, &#x27;MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2...cnR5CjAwMmZzaWduYXR1cmUgjjR1B00v5oj9o_C_FEWvVqD1q8pk7j2RvzzsUFI1Dd4K&#x27;, &#x27;key&#x27;, &#x27;first_party&#x27;, &#x27;discharge_first_party&#x27;],), kwargs = {}<br/>inputdata = None, process = &lt;subprocess.Popen object at 0x7f5f25749278&gt;, output = b&#x27;&#x27;, unused_err = None, retcode = 255<br/><br/>    def check_output(*popenargs, timeout=None, **kwargs):<br/>        r&quot;&quot;&quot;Run command with arguments and return its output.<br/>    <br/>        If the exit code was non-zero it raises a CalledProcessError.  The<br/>        CalledProcessError object will have the return code in the returncode<br/>        attribute and output in the output attribute.<br/>    <br/>        The arguments are the same as for the Popen constructor.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;ls&quot;, &quot;-l&quot;, &quot;/dev/null&quot;])<br/>        b&#x27;crw-rw-rw- 1 root root 1, 3 Oct 18  2007 /dev/null\n&#x27;<br/>    <br/>        The stdout argument is not allowed as it is used internally.<br/>        To capture standard error in the result, use stderr=STDOUT.<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;/bin/sh&quot;, &quot;-c&quot;,<br/>        ...               &quot;ls -l non_existent_file ; exit 0&quot;],<br/>        ...              stderr=STDOUT)<br/>        b&#x27;ls: non_existent_file: No such file or directory\n&#x27;<br/>    <br/>        There is an additional optional argument, &quot;input&quot;, allowing you to<br/>        pass a string to the subprocess&#x27;s stdin.  If you use this argument<br/>        you may not also use the Popen constructor&#x27;s &quot;stdin&quot; argument, as<br/>        it too will be used internally.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;sed&quot;, &quot;-e&quot;, &quot;s/foo/bar/&quot;],<br/>        ...              input=b&quot;when in the course of fooman events\n&quot;)<br/>        b&#x27;when in the course of barman events\n&#x27;<br/>    <br/>        If universal_newlines=True is passed, the return value will be a<br/>        string rather than bytes.<br/>        &quot;&quot;&quot;<br/>        if &#x27;stdout&#x27; in kwargs:<br/>            raise ValueError(&#x27;stdout argument not allowed, it will be overridden.&#x27;)<br/>        if &#x27;input&#x27; in kwargs:<br/>            if &#x27;stdin&#x27; in kwargs:<br/>                raise ValueError(&#x27;stdin and input arguments may not both be used.&#x27;)<br/>            inputdata = kwargs[&#x27;input&#x27;]<br/>            del kwargs[&#x27;input&#x27;]<br/>            kwargs[&#x27;stdin&#x27;] = PIPE<br/>        else:<br/>            inputdata = None<br/>        with Popen(*popenargs, stdout=PIPE, **kwargs) as process:<br/>            try:<br/>                output, unused_err = process.communicate(inputdata, timeout=timeout)<br/>            except TimeoutExpired:<br/>                process.kill()<br/>                output, unused_err = process.communicate()<br/>                raise TimeoutExpired(process.args, timeout, output=output)<br/>            except:<br/>                process.kill()<br/>                process.wait()<br/>                raise<br/>            retcode = process.poll()<br/>            if retcode:<br/>&gt;               raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E               subprocess.CalledProcessError: Command &#x27;[&#x27;implementations/php-macaroons/verify_third_party_macaroon&#x27;, &#x27;MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2lkIGZpcnN0X3BhcnR5CjAwMTVjaWQgZGlzY2hhcmdlX2lkCjAwNTF2aWQgPUhWrZl6yEAFa7xjWnnf0_MxYvwDjv2g7XWYq1Z3woDnXZ9OrHyYvLG_Vkq30_e4ZMW_jDsR_uuqA-GCILDiQq03ymvbP2lOCjAwMTVjbCBkaXNjaGFyZ2VfbG9jCjAwMmZzaWduYXR1cmUgRyl7u2x3FzGRMjlC_8yZ6DdMvfsrBLKxsPDcUOz4YnkK&#x27;, &#x27;MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgjjR1B00v5oj9o_C_FEWvVqD1q8pk7j2RvzzsUFI1Dd4K&#x27;, &#x27;key&#x27;, &#x27;first_party&#x27;, &#x27;discharge_first_party&#x27;]&#x27; returned non-zero exit status 255</span><br/><br/>../lib/python3.4/subprocess.py:620: CalledProcessError<br/>----------------------------- Captured stderr call -----------------------------<br/>PHP Fatal error:  Undefined constant &apos;Sodium\CRYPTO_SECRETBOX_NONCEBYTES&apos; in /usr/src/implementations/php-macaroons/vendor/immense/macaroons/lib/Macaroons/Verifier.php on line 204
</div></td></tr>
        <tr class="skipped results-table-row">
          <td class="col-result">Skipped</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[go-macaroon-go-macaroon-rust-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">(&#x27;/usr/src/tests/test_basic_compatibility.py&#x27;, 30, &#x27;Skipped: Test not implemented for rust-macaroons&#x27;)<br/></div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[go-macaroon-php-macaroons-php-macaroons]</td>
          <td class="col-duration">0.09</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;go-macaroon&#x27;, macaroon_impl = &#x27;php-macaroons&#x27;, verify_impl = &#x27;php-macaroons&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>&gt;           macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/><br/>tests/test_basic_compatibility.py:126: <br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/>../lib/python3.4/functools.py:472: in wrapper<br/>    result = user_function(*args, **kwds)<br/>tests/test_basic_compatibility.py:27: in execute_command<br/>    return subprocess.check_output([path] + list(args))<br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/><br/>timeout = None, popenargs = ([&#x27;implementations/php-macaroons/third_party_macaroon_serialized&#x27;, &#x27;loc&#x27;, &#x27;key&#x27;, &#x27;id&#x27;, &#x27;first_party&#x27;, &#x27;discharge_loc&#x27;, ...],), kwargs = {}, inputdata = None, process = &lt;subprocess.Popen object at 0x7f5f25444e48&gt;, output = b&#x27;&#x27;<br/>unused_err = None, retcode = 255<br/><br/>    def check_output(*popenargs, timeout=None, **kwargs):<br/>        r&quot;&quot;&quot;Run command with arguments and return its output.<br/>    <br/>        If the exit code was non-zero it raises a CalledProcessError.  The<br/>        CalledProcessError object will have the return code in the returncode<br/>        attribute and output in the output attribute.<br/>    <br/>        The arguments are the same as for the Popen constructor.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;ls&quot;, &quot;-l&quot;, &quot;/dev/null&quot;])<br/>        b&#x27;crw-rw-rw- 1 root root 1, 3 Oct 18  2007 /dev/null\n&#x27;<br/>    <br/>        The stdout argument is not allowed as it is used internally.<br/>        To capture standard error in the result, use stderr=STDOUT.<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;/bin/sh&quot;, &quot;-c&quot;,<br/>        ...               &quot;ls -l non_existent_file ; exit 0&quot;],<br/>        ...              stderr=STDOUT)<br/>        b&#x27;ls: non_existent_file: No such file or directory\n&#x27;<br/>    <br/>        There is an additional optional argument, &quot;input&quot;, allowing you to<br/>        pass a string to the subprocess&#x27;s stdin.  If you use this argument<br/>        you may not also use the Popen constructor&#x27;s &quot;stdin&quot; argument, as<br/>        it too will be used internally.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;sed&quot;, &quot;-e&quot;, &quot;s/foo/bar/&quot;],<br/>        ...              input=b&quot;when in the course of fooman events\n&quot;)<br/>        b&#x27;when in the course of barman events\n&#x27;<br/>    <br/>        If universal_newlines=True is passed, the return value will be a<br/>        string rather than bytes.<br/>        &quot;&quot;&quot;<br/>        if &#x27;stdout&#x27; in kwargs:<br/>            raise ValueError(&#x27;stdout argument not allowed, it will be overridden.&#x27;)<br/>        if &#x27;input&#x27; in kwargs:<br/>            if &#x27;stdin&#x27; in kwargs:<br/>                raise ValueError(&#x27;stdin and input arguments may not both be used.&#x27;)<br/>            inputdata = kwargs[&#x27;input&#x27;]<br/>            del kwargs[&#x27;input&#x27;]<br/>            kwargs[&#x27;stdin&#x27;] = PIPE<br/>        else:<br/>            inputdata = None<br/>        with Popen(*popenargs, stdout=PIPE, **kwargs) as process:<br/>            try:<br/>                output, unused_err = process.communicate(inputdata, timeout=timeout)<br/>            except TimeoutExpired:<br/>                process.kill()<br/>                output, unused_err = process.communicate()<br/>                raise TimeoutExpired(process.args, timeout, output=output)<br/>            except:<br/>                process.kill()<br/>                process.wait()<br/>                raise<br/>            retcode = process.poll()<br/>            if retcode:<br/>&gt;               raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E               subprocess.CalledProcessError: Command &#x27;[&#x27;implementations/php-macaroons/third_party_macaroon_serialized&#x27;, &#x27;loc&#x27;, &#x27;key&#x27;, &#x27;id&#x27;, &#x27;first_party&#x27;, &#x27;discharge_loc&#x27;, &#x27;discharge_key&#x27;, &#x27;discharge_id&#x27;, &#x27;MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgZMyVaQHSRRPRQPl7S1zgIHnbz6lrtAFr-42xmzq5P5IK&#x27;]&#x27; returned non-zero exit status 255</span><br/><br/>../lib/python3.4/subprocess.py:620: CalledProcessError<br/>----------------------------- Captured stderr call -----------------------------<br/>PHP Fatal error:  Call to undefined function Sodium\randombytes_buf() in /usr/src/implementations/php-macaroons/vendor/immense/macaroons/lib/Macaroons/Macaroon.php on line 78
</div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[go-macaroon-php-macaroons-rust-macaroons]</td>
          <td class="col-duration">0.06</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;go-macaroon&#x27;, macaroon_impl = &#x27;php-macaroons&#x27;, verify_impl = &#x27;rust-macaroons&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>&gt;           macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/><br/>tests/test_basic_compatibility.py:126: <br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/>../lib/python3.4/functools.py:472: in wrapper<br/>    result = user_function(*args, **kwds)<br/>tests/test_basic_compatibility.py:27: in execute_command<br/>    return subprocess.check_output([path] + list(args))<br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/><br/>timeout = None, popenargs = ([&#x27;implementations/php-macaroons/third_party_macaroon_serialized&#x27;, &#x27;loc&#x27;, &#x27;key&#x27;, &#x27;id&#x27;, &#x27;first_party&#x27;, &#x27;discharge_loc&#x27;, ...],), kwargs = {}, inputdata = None, process = &lt;subprocess.Popen object at 0x7f5f25741c50&gt;, output = b&#x27;&#x27;<br/>unused_err = None, retcode = 255<br/><br/>    def check_output(*popenargs, timeout=None, **kwargs):<br/>        r&quot;&quot;&quot;Run command with arguments and return its output.<br/>    <br/>        If the exit code was non-zero it raises a CalledProcessError.  The<br/>        CalledProcessError object will have the return code in the returncode<br/>        attribute and output in the output attribute.<br/>    <br/>        The arguments are the same as for the Popen constructor.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;ls&quot;, &quot;-l&quot;, &quot;/dev/null&quot;])<br/>        b&#x27;crw-rw-rw- 1 root root 1, 3 Oct 18  2007 /dev/null\n&#x27;<br/>    <br/>        The stdout argument is not allowed as it is used internally.<br/>        To capture standard error in the result, use stderr=STDOUT.<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;/bin/sh&quot;, &quot;-c&quot;,<br/>        ...               &quot;ls -l non_existent_file ; exit 0&quot;],<br/>        ...              stderr=STDOUT)<br/>        b&#x27;ls: non_existent_file: No such file or directory\n&#x27;<br/>    <br/>        There is an additional optional argument, &quot;input&quot;, allowing you to<br/>        pass a string to the subprocess&#x27;s stdin.  If you use this argument<br/>        you may not also use the Popen constructor&#x27;s &quot;stdin&quot; argument, as<br/>        it too will be used internally.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;sed&quot;, &quot;-e&quot;, &quot;s/foo/bar/&quot;],<br/>        ...              input=b&quot;when in the course of fooman events\n&quot;)<br/>        b&#x27;when in the course of barman events\n&#x27;<br/>    <br/>        If universal_newlines=True is passed, the return value will be a<br/>        string rather than bytes.<br/>        &quot;&quot;&quot;<br/>        if &#x27;stdout&#x27; in kwargs:<br/>            raise ValueError(&#x27;stdout argument not allowed, it will be overridden.&#x27;)<br/>        if &#x27;input&#x27; in kwargs:<br/>            if &#x27;stdin&#x27; in kwargs:<br/>                raise ValueError(&#x27;stdin and input arguments may not both be used.&#x27;)<br/>            inputdata = kwargs[&#x27;input&#x27;]<br/>            del kwargs[&#x27;input&#x27;]<br/>            kwargs[&#x27;stdin&#x27;] = PIPE<br/>        else:<br/>            inputdata = None<br/>        with Popen(*popenargs, stdout=PIPE, **kwargs) as process:<br/>            try:<br/>                output, unused_err = process.communicate(inputdata, timeout=timeout)<br/>            except TimeoutExpired:<br/>                process.kill()<br/>                output, unused_err = process.communicate()<br/>                raise TimeoutExpired(process.args, timeout, output=output)<br/>            except:<br/>                process.kill()<br/>                process.wait()<br/>                raise<br/>            retcode = process.poll()<br/>            if retcode:<br/>&gt;               raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E               subprocess.CalledProcessError: Command &#x27;[&#x27;implementations/php-macaroons/third_party_macaroon_serialized&#x27;, &#x27;loc&#x27;, &#x27;key&#x27;, &#x27;id&#x27;, &#x27;first_party&#x27;, &#x27;discharge_loc&#x27;, &#x27;discharge_key&#x27;, &#x27;discharge_id&#x27;, &#x27;MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgZMyVaQHSRRPRQPl7S1zgIHnbz6lrtAFr-42xmzq5P5IK&#x27;]&#x27; returned non-zero exit status 255</span><br/><br/>../lib/python3.4/subprocess.py:620: CalledProcessError<br/>----------------------------- Captured stderr call -----------------------------<br/>PHP Fatal error:  Call to undefined function Sodium\randombytes_buf() in /usr/src/implementations/php-macaroons/vendor/immense/macaroons/lib/Macaroons/Macaroon.php on line 78
</div></td></tr>
        <tr class="skipped results-table-row">
          <td class="col-result">Skipped</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[go-macaroon-rust-macaroons-rust-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">(&#x27;/usr/src/tests/test_basic_compatibility.py&#x27;, 30, &#x27;Skipped: Test not implemented for rust-macaroons&#x27;)<br/></div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[php-macaroons-php-macaroons-php-macaroons]</td>
          <td class="col-duration">0.10</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;php-macaroons&#x27;, macaroon_impl = &#x27;php-macaroons&#x27;, verify_impl = &#x27;php-macaroons&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>&gt;           macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/><br/>tests/test_basic_compatibility.py:126: <br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/>../lib/python3.4/functools.py:472: in wrapper<br/>    result = user_function(*args, **kwds)<br/>tests/test_basic_compatibility.py:27: in execute_command<br/>    return subprocess.check_output([path] + list(args))<br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/><br/>timeout = None, popenargs = ([&#x27;implementations/php-macaroons/third_party_macaroon_serialized&#x27;, &#x27;loc&#x27;, &#x27;key&#x27;, &#x27;id&#x27;, &#x27;first_party&#x27;, &#x27;discharge_loc&#x27;, ...],), kwargs = {}, inputdata = None, process = &lt;subprocess.Popen object at 0x7f5f25753d68&gt;, output = b&#x27;&#x27;<br/>unused_err = None, retcode = 255<br/><br/>    def check_output(*popenargs, timeout=None, **kwargs):<br/>        r&quot;&quot;&quot;Run command with arguments and return its output.<br/>    <br/>        If the exit code was non-zero it raises a CalledProcessError.  The<br/>        CalledProcessError object will have the return code in the returncode<br/>        attribute and output in the output attribute.<br/>    <br/>        The arguments are the same as for the Popen constructor.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;ls&quot;, &quot;-l&quot;, &quot;/dev/null&quot;])<br/>        b&#x27;crw-rw-rw- 1 root root 1, 3 Oct 18  2007 /dev/null\n&#x27;<br/>    <br/>        The stdout argument is not allowed as it is used internally.<br/>        To capture standard error in the result, use stderr=STDOUT.<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;/bin/sh&quot;, &quot;-c&quot;,<br/>        ...               &quot;ls -l non_existent_file ; exit 0&quot;],<br/>        ...              stderr=STDOUT)<br/>        b&#x27;ls: non_existent_file: No such file or directory\n&#x27;<br/>    <br/>        There is an additional optional argument, &quot;input&quot;, allowing you to<br/>        pass a string to the subprocess&#x27;s stdin.  If you use this argument<br/>        you may not also use the Popen constructor&#x27;s &quot;stdin&quot; argument, as<br/>        it too will be used internally.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;sed&quot;, &quot;-e&quot;, &quot;s/foo/bar/&quot;],<br/>        ...              input=b&quot;when in the course of fooman events\n&quot;)<br/>        b&#x27;when in the course of barman events\n&#x27;<br/>    <br/>        If universal_newlines=True is passed, the return value will be a<br/>        string rather than bytes.<br/>        &quot;&quot;&quot;<br/>        if &#x27;stdout&#x27; in kwargs:<br/>            raise ValueError(&#x27;stdout argument not allowed, it will be overridden.&#x27;)<br/>        if &#x27;input&#x27; in kwargs:<br/>            if &#x27;stdin&#x27; in kwargs:<br/>                raise ValueError(&#x27;stdin and input arguments may not both be used.&#x27;)<br/>            inputdata = kwargs[&#x27;input&#x27;]<br/>            del kwargs[&#x27;input&#x27;]<br/>            kwargs[&#x27;stdin&#x27;] = PIPE<br/>        else:<br/>            inputdata = None<br/>        with Popen(*popenargs, stdout=PIPE, **kwargs) as process:<br/>            try:<br/>                output, unused_err = process.communicate(inputdata, timeout=timeout)<br/>            except TimeoutExpired:<br/>                process.kill()<br/>                output, unused_err = process.communicate()<br/>                raise TimeoutExpired(process.args, timeout, output=output)<br/>            except:<br/>                process.kill()<br/>                process.wait()<br/>                raise<br/>            retcode = process.poll()<br/>            if retcode:<br/>&gt;               raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E               subprocess.CalledProcessError: Command &#x27;[&#x27;implementations/php-macaroons/third_party_macaroon_serialized&#x27;, &#x27;loc&#x27;, &#x27;key&#x27;, &#x27;id&#x27;, &#x27;first_party&#x27;, &#x27;discharge_loc&#x27;, &#x27;discharge_key&#x27;, &#x27;discharge_id&#x27;, &#x27;MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgZMyVaQHSRRPRQPl7S1zgIHnbz6lrtAFr-42xmzq5P5IK&#x27;]&#x27; returned non-zero exit status 255</span><br/><br/>../lib/python3.4/subprocess.py:620: CalledProcessError<br/>----------------------------- Captured stderr call -----------------------------<br/>PHP Fatal error:  Call to undefined function Sodium\randombytes_buf() in /usr/src/implementations/php-macaroons/vendor/immense/macaroons/lib/Macaroons/Macaroon.php on line 78
</div></td></tr>
        <tr class="failed results-table-row">
          <td class="col-result">Failed</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[php-macaroons-php-macaroons-rust-macaroons]</td>
          <td class="col-duration">0.13</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">discharge_impl = &#x27;php-macaroons&#x27;, macaroon_impl = &#x27;php-macaroons&#x27;, verify_impl = &#x27;rust-macaroons&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;discharge_impl,macaroon_impl,verify_impl&quot;,<br/>                             itertools.combinations_with_replacement(implementations, 3))<br/>    def test_third_party_caveat_verification(discharge_impl,<br/>                                             macaroon_impl,<br/>                                             verify_impl):<br/>        discharge_location = &#x27;discharge_loc&#x27;<br/>        discharge_key = &#x27;discharge_key&#x27;<br/>        discharge_id = &#x27;discharge_id&#x27;<br/>        discharge_first_party = &#x27;discharge_first_party&#x27;<br/>        first_party = &#x27;first_party&#x27;<br/>        key = &#x27;key&#x27;<br/>    <br/>        discharge_command = &#x27;first_party_macaroon_serialized&#x27;<br/>        discharge_args = (<br/>            discharge_location, discharge_key, discharge_id, discharge_first_party<br/>        )<br/>        discharge_macaroon, _, _, _ = execute_command(<br/>            discharge_impl, discharge_command, discharge_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/>    <br/>        macaroon_command = &#x27;third_party_macaroon_serialized&#x27;<br/>        macaroon_args = (<br/>            &#x27;loc&#x27;, key, &#x27;id&#x27;, first_party,<br/>            discharge_location, discharge_key, discharge_id, discharge_macaroon<br/>        )<br/>        serialized_macaroon, bound_discharge, _ = execute_command(<br/>&gt;           macaroon_impl, macaroon_command, macaroon_args<br/>        ).decode(&#x27;ascii&#x27;).split(&#x27;\n&#x27;)<br/><br/>tests/test_basic_compatibility.py:126: <br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/>../lib/python3.4/functools.py:472: in wrapper<br/>    result = user_function(*args, **kwds)<br/>tests/test_basic_compatibility.py:27: in execute_command<br/>    return subprocess.check_output([path] + list(args))<br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/><br/>timeout = None, popenargs = ([&#x27;implementations/php-macaroons/third_party_macaroon_serialized&#x27;, &#x27;loc&#x27;, &#x27;key&#x27;, &#x27;id&#x27;, &#x27;first_party&#x27;, &#x27;discharge_loc&#x27;, ...],), kwargs = {}, inputdata = None, process = &lt;subprocess.Popen object at 0x7f5f2573a0b8&gt;, output = b&#x27;&#x27;<br/>unused_err = None, retcode = 255<br/><br/>    def check_output(*popenargs, timeout=None, **kwargs):<br/>        r&quot;&quot;&quot;Run command with arguments and return its output.<br/>    <br/>        If the exit code was non-zero it raises a CalledProcessError.  The<br/>        CalledProcessError object will have the return code in the returncode<br/>        attribute and output in the output attribute.<br/>    <br/>        The arguments are the same as for the Popen constructor.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;ls&quot;, &quot;-l&quot;, &quot;/dev/null&quot;])<br/>        b&#x27;crw-rw-rw- 1 root root 1, 3 Oct 18  2007 /dev/null\n&#x27;<br/>    <br/>        The stdout argument is not allowed as it is used internally.<br/>        To capture standard error in the result, use stderr=STDOUT.<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;/bin/sh&quot;, &quot;-c&quot;,<br/>        ...               &quot;ls -l non_existent_file ; exit 0&quot;],<br/>        ...              stderr=STDOUT)<br/>        b&#x27;ls: non_existent_file: No such file or directory\n&#x27;<br/>    <br/>        There is an additional optional argument, &quot;input&quot;, allowing you to<br/>        pass a string to the subprocess&#x27;s stdin.  If you use this argument<br/>        you may not also use the Popen constructor&#x27;s &quot;stdin&quot; argument, as<br/>        it too will be used internally.  Example:<br/>    <br/>        &gt;&gt;&gt; check_output([&quot;sed&quot;, &quot;-e&quot;, &quot;s/foo/bar/&quot;],<br/>        ...              input=b&quot;when in the course of fooman events\n&quot;)<br/>        b&#x27;when in the course of barman events\n&#x27;<br/>    <br/>        If universal_newlines=True is passed, the return value will be a<br/>        string rather than bytes.<br/>        &quot;&quot;&quot;<br/>        if &#x27;stdout&#x27; in kwargs:<br/>            raise ValueError(&#x27;stdout argument not allowed, it will be overridden.&#x27;)<br/>        if &#x27;input&#x27; in kwargs:<br/>            if &#x27;stdin&#x27; in kwargs:<br/>                raise ValueError(&#x27;stdin and input arguments may not both be used.&#x27;)<br/>            inputdata = kwargs[&#x27;input&#x27;]<br/>            del kwargs[&#x27;input&#x27;]<br/>            kwargs[&#x27;stdin&#x27;] = PIPE<br/>        else:<br/>            inputdata = None<br/>        with Popen(*popenargs, stdout=PIPE, **kwargs) as process:<br/>            try:<br/>                output, unused_err = process.communicate(inputdata, timeout=timeout)<br/>            except TimeoutExpired:<br/>                process.kill()<br/>                output, unused_err = process.communicate()<br/>                raise TimeoutExpired(process.args, timeout, output=output)<br/>            except:<br/>                process.kill()<br/>                process.wait()<br/>                raise<br/>            retcode = process.poll()<br/>            if retcode:<br/>&gt;               raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E               subprocess.CalledProcessError: Command &#x27;[&#x27;implementations/php-macaroons/third_party_macaroon_serialized&#x27;, &#x27;loc&#x27;, &#x27;key&#x27;, &#x27;id&#x27;, &#x27;first_party&#x27;, &#x27;discharge_loc&#x27;, &#x27;discharge_key&#x27;, &#x27;discharge_id&#x27;, &#x27;MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgZMyVaQHSRRPRQPl7S1zgIHnbz6lrtAFr-42xmzq5P5IK&#x27;]&#x27; returned non-zero exit status 255</span><br/><br/>../lib/python3.4/subprocess.py:620: CalledProcessError<br/>----------------------------- Captured stderr call -----------------------------<br/>PHP Fatal error:  Call to undefined function Sodium\randombytes_buf() in /usr/src/implementations/php-macaroons/vendor/immense/macaroons/lib/Macaroons/Macaroon.php on line 78
</div></td></tr>
        <tr class="skipped results-table-row">
          <td class="col-result">Skipped</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[php-macaroons-rust-macaroons-rust-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">(&#x27;/usr/src/tests/test_basic_compatibility.py&#x27;, 30, &#x27;Skipped: Test not implemented for rust-macaroons&#x27;)<br/></div></td></tr>
        <tr class="skipped results-table-row">
          <td class="col-result">Skipped</td>
          <td class="col-name">tests/test_basic_compatibility.py::test_third_party_caveat_verification[rust-macaroons-rust-macaroons-rust-macaroons]</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td>
          <td class="extra">
            <div class="log">(&#x27;/usr/src/tests/test_basic_compatibility.py&#x27;, 30, &#x27;Skipped: Test not implemented for rust-macaroons&#x27;)<br/></div></td></tr></tbody></table></body></html>

以上是关于html 蛋白杏仁饼干兼容性失败的主要内容,如果未能解决你的问题,请参考以下文章

COCOA ALMOND BISCOTTI┃意式巧克力杏仁脆饼

巴比兔分销软件

Mass Spectrometry-Compatible Subcellular Fractionation for Proteomics 质谱兼容的蛋白质组学的亚细胞分离(解读人:王茹凯)

桂圆性味归经功效作用

如何在rails中提供erb文件作为蛋白石模板?

html 饼干banner.html