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">('/usr/src/tests/test_basic_compatibility.py', 30, 'Skipped: Test not implemented for rust-macaroons')<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">('/usr/src/tests/test_basic_compatibility.py', 30, 'Skipped: Test not implemented for rust-macaroons')<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">('/usr/src/tests/test_basic_compatibility.py', 30, 'Skipped: Test not implemented for rust-macaroons')<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">('/usr/src/tests/test_basic_compatibility.py', 30, 'Skipped: Test not implemented for rust-macaroons')<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">('/usr/src/tests/test_basic_compatibility.py', 30, 'Skipped: Test not implemented for rust-macaroons')<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">('/usr/src/tests/test_basic_compatibility.py', 30, 'Skipped: Test not implemented for rust-macaroons')<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">('/usr/src/tests/test_basic_compatibility.py', 30, 'Skipped: Test not implemented for rust-macaroons')<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 = 'libmacaroons', macaroon_impl = 'libmacaroons', verify_impl = 'macaroons-js'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<br/> <br/> verify_command = 'verify_third_party_macaroon'<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('ascii').split('\n')<br/> <br/>> assert(verified == "True")<br/><span class="error">E assert 'False' == 'True'</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 = 'libmacaroons', macaroon_impl = 'libmacaroons', verify_impl = 'php-macaroons'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<br/> <br/> verify_command = 'verify_third_party_macaroon'<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('ascii').split('\n')<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 = (['implementations/php-macaroons/verify_third_party_macaroon', 'MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2...cnR5CjAwMmZzaWduYXR1cmUgRVru6SrWKAy7QL2JBr_e3hL9HnuU4io7E_oy-KyZZLwK', 'key', 'first_party', 'discharge_first_party'],), kwargs = {}<br/>inputdata = None, process = <subprocess.Popen object at 0x7f5f2589a940>, output = b'', unused_err = None, retcode = 255<br/><br/> def check_output(*popenargs, timeout=None, **kwargs):<br/> r"""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/> >>> check_output(["ls", "-l", "/dev/null"])<br/> b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'<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/> >>> check_output(["/bin/sh", "-c",<br/> ... "ls -l non_existent_file ; exit 0"],<br/> ... stderr=STDOUT)<br/> b'ls: non_existent_file: No such file or directory\n'<br/> <br/> There is an additional optional argument, "input", allowing you to<br/> pass a string to the subprocess's stdin. If you use this argument<br/> you may not also use the Popen constructor's "stdin" argument, as<br/> it too will be used internally. Example:<br/> <br/> >>> check_output(["sed", "-e", "s/foo/bar/"],<br/> ... input=b"when in the course of fooman events\n")<br/> b'when in the course of barman events\n'<br/> <br/> If universal_newlines=True is passed, the return value will be a<br/> string rather than bytes.<br/> """<br/> if 'stdout' in kwargs:<br/> raise ValueError('stdout argument not allowed, it will be overridden.')<br/> if 'input' in kwargs:<br/> if 'stdin' in kwargs:<br/> raise ValueError('stdin and input arguments may not both be used.')<br/> inputdata = kwargs['input']<br/> del kwargs['input']<br/> kwargs['stdin'] = 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/>> raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E subprocess.CalledProcessError: Command '['implementations/php-macaroons/verify_third_party_macaroon', 'MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2lkIGZpcnN0X3BhcnR5CjAwMTVjaWQgZGlzY2hhcmdlX2lkCjAwNTF2aWQgwWXPn7sWAStidIZ8yf5NqnX5t2XAp3GXd5KPfE2seF0ur1wzaDyBHl4OtV-EHfWwT91qwoTjGTtfeAxMhUceFQ4LoNabM0c3CjAwMTVjbCBkaXNjaGFyZ2VfbG9jCjAwMmZzaWduYXR1cmUgc6Z2Nn5853b0tsNH4Mc0LdsXOgQn4l4GIP6ehRTybRgK', 'MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgRVru6SrWKAy7QL2JBr_e3hL9HnuU4io7E_oy-KyZZLwK', 'key', 'first_party', 'discharge_first_party']' 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 'Sodium\CRYPTO_SECRETBOX_NONCEBYTES' 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">('/usr/src/tests/test_basic_compatibility.py', 30, 'Skipped: Test not implemented for rust-macaroons')<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 = 'libmacaroons', macaroon_impl = 'pymacaroons', verify_impl = 'macaroons-js'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<br/> <br/> verify_command = 'verify_third_party_macaroon'<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('ascii').split('\n')<br/> <br/>> assert(verified == "True")<br/><span class="error">E assert 'False' == 'True'</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 = 'libmacaroons', macaroon_impl = 'pymacaroons', verify_impl = 'php-macaroons'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<br/> <br/> verify_command = 'verify_third_party_macaroon'<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('ascii').split('\n')<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 = (['implementations/php-macaroons/verify_third_party_macaroon', 'MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2...cnR5CjAwMmZzaWduYXR1cmUgB4E0TtjwF3uEhRN3uG4sD_I4pYPwZS1CjLLRBxVCLKsK', 'key', 'first_party', 'discharge_first_party'],), kwargs = {}<br/>inputdata = None, process = <subprocess.Popen object at 0x7f5f257603c8>, output = b'', unused_err = None, retcode = 255<br/><br/> def check_output(*popenargs, timeout=None, **kwargs):<br/> r"""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/> >>> check_output(["ls", "-l", "/dev/null"])<br/> b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'<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/> >>> check_output(["/bin/sh", "-c",<br/> ... "ls -l non_existent_file ; exit 0"],<br/> ... stderr=STDOUT)<br/> b'ls: non_existent_file: No such file or directory\n'<br/> <br/> There is an additional optional argument, "input", allowing you to<br/> pass a string to the subprocess's stdin. If you use this argument<br/> you may not also use the Popen constructor's "stdin" argument, as<br/> it too will be used internally. Example:<br/> <br/> >>> check_output(["sed", "-e", "s/foo/bar/"],<br/> ... input=b"when in the course of fooman events\n")<br/> b'when in the course of barman events\n'<br/> <br/> If universal_newlines=True is passed, the return value will be a<br/> string rather than bytes.<br/> """<br/> if 'stdout' in kwargs:<br/> raise ValueError('stdout argument not allowed, it will be overridden.')<br/> if 'input' in kwargs:<br/> if 'stdin' in kwargs:<br/> raise ValueError('stdin and input arguments may not both be used.')<br/> inputdata = kwargs['input']<br/> del kwargs['input']<br/> kwargs['stdin'] = 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/>> raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E subprocess.CalledProcessError: Command '['implementations/php-macaroons/verify_third_party_macaroon', 'MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2lkIGZpcnN0X3BhcnR5CjAwMTVjaWQgZGlzY2hhcmdlX2lkCjAwNTF2aWQgA_tVuQq4ATvRBoYpVaXIjYWBf3HQKm66ueDX21hqLwmYU-NTMOFXdEUNMckbtm1sp2AiScSiYrnK4qnPpdlRQ_t8h1jfq1JaCjAwMTVjbCBkaXNjaGFyZ2VfbG9jCjAwMmZzaWduYXR1cmUghgva_4h6kNXX_9faoWhKBYy7WwNixYw6BPHZvYUYuKAK', 'MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgB4E0TtjwF3uEhRN3uG4sD_I4pYPwZS1CjLLRBxVCLKsK', 'key', 'first_party', 'discharge_first_party']' 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 'Sodium\CRYPTO_SECRETBOX_NONCEBYTES' 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">('/usr/src/tests/test_basic_compatibility.py', 30, 'Skipped: Test not implemented for rust-macaroons')<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 = 'libmacaroons', macaroon_impl = 'ruby-macaroons', verify_impl = 'macaroons-js'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<br/> <br/> verify_command = 'verify_third_party_macaroon'<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('ascii').split('\n')<br/> <br/>> assert(verified == "True")<br/><span class="error">E assert 'False' == 'True'</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 = 'libmacaroons', macaroon_impl = 'ruby-macaroons', verify_impl = 'php-macaroons'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<br/> <br/> verify_command = 'verify_third_party_macaroon'<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('ascii').split('\n')<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 = (['implementations/php-macaroons/verify_third_party_macaroon', 'MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2...cnR5CjAwMmZzaWduYXR1cmUg1nxh0i0oUM6FEGn6sF80as_Trk5UPJpUsoeadPrz4hYK', 'key', 'first_party', 'discharge_first_party'],), kwargs = {}<br/>inputdata = None, process = <subprocess.Popen object at 0x7f5f2576c080>, output = b'', unused_err = None, retcode = 255<br/><br/> def check_output(*popenargs, timeout=None, **kwargs):<br/> r"""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/> >>> check_output(["ls", "-l", "/dev/null"])<br/> b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'<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/> >>> check_output(["/bin/sh", "-c",<br/> ... "ls -l non_existent_file ; exit 0"],<br/> ... stderr=STDOUT)<br/> b'ls: non_existent_file: No such file or directory\n'<br/> <br/> There is an additional optional argument, "input", allowing you to<br/> pass a string to the subprocess's stdin. If you use this argument<br/> you may not also use the Popen constructor's "stdin" argument, as<br/> it too will be used internally. Example:<br/> <br/> >>> check_output(["sed", "-e", "s/foo/bar/"],<br/> ... input=b"when in the course of fooman events\n")<br/> b'when in the course of barman events\n'<br/> <br/> If universal_newlines=True is passed, the return value will be a<br/> string rather than bytes.<br/> """<br/> if 'stdout' in kwargs:<br/> raise ValueError('stdout argument not allowed, it will be overridden.')<br/> if 'input' in kwargs:<br/> if 'stdin' in kwargs:<br/> raise ValueError('stdin and input arguments may not both be used.')<br/> inputdata = kwargs['input']<br/> del kwargs['input']<br/> kwargs['stdin'] = 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/>> raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E subprocess.CalledProcessError: Command '['implementations/php-macaroons/verify_third_party_macaroon', 'MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2lkIGZpcnN0X3BhcnR5CjAwMTVjaWQgZGlzY2hhcmdlX2lkCjAwNTF2aWQgSwSk4AFjnK59Vk7h-gfjH5LKotcmv4msR--sqc5xhBy_b32W_PaB4g5MYZIyfn0pE7s2l0QuJzTJT0C3r5qPQB2wyZmc1KmaCjAwMTVjbCBkaXNjaGFyZ2VfbG9jCjAwMmZzaWduYXR1cmUgIZRROCMRe8uSnwoTeo0qZ8NAPVgJ5Vh_80MIF0hP8BwK', 'MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUg1nxh0i0oUM6FEGn6sF80as_Trk5UPJpUsoeadPrz4hYK', 'key', 'first_party', 'discharge_first_party']' 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 'Sodium\CRYPTO_SECRETBOX_NONCEBYTES' 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">('/usr/src/tests/test_basic_compatibility.py', 30, 'Skipped: Test not implemented for rust-macaroons')<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 = 'libmacaroons', macaroon_impl = 'macaroons-js', verify_impl = 'macaroons-js'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<br/> <br/> verify_command = 'verify_third_party_macaroon'<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('ascii').split('\n')<br/> <br/>> assert(verified == "True")<br/><span class="error">E assert 'False' == 'True'</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 = 'libmacaroons', macaroon_impl = 'macaroons-js', verify_impl = 'go-macaroon'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<br/> <br/> verify_command = 'verify_third_party_macaroon'<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('ascii').split('\n')<br/> <br/>> assert(verified == "True")<br/><span class="error">E assert 'failed to de...ption failure' == 'True'</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 = 'libmacaroons', macaroon_impl = 'macaroons-js', verify_impl = 'php-macaroons'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<br/> <br/> verify_command = 'verify_third_party_macaroon'<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('ascii').split('\n')<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 = (['implementations/php-macaroons/verify_third_party_macaroon', 'MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2...cnR5CjAwMmZzaWduYXR1cmUgNddQgB0o9qjwddy5A7NGm1juaTGaU-Ov1fN9RS5j9iEK', 'key', 'first_party', 'discharge_first_party'],), kwargs = {}<br/>inputdata = None, process = <subprocess.Popen object at 0x7f5f2582f898>, output = b'', unused_err = None, retcode = 255<br/><br/> def check_output(*popenargs, timeout=None, **kwargs):<br/> r"""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/> >>> check_output(["ls", "-l", "/dev/null"])<br/> b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'<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/> >>> check_output(["/bin/sh", "-c",<br/> ... "ls -l non_existent_file ; exit 0"],<br/> ... stderr=STDOUT)<br/> b'ls: non_existent_file: No such file or directory\n'<br/> <br/> There is an additional optional argument, "input", allowing you to<br/> pass a string to the subprocess's stdin. If you use this argument<br/> you may not also use the Popen constructor's "stdin" argument, as<br/> it too will be used internally. Example:<br/> <br/> >>> check_output(["sed", "-e", "s/foo/bar/"],<br/> ... input=b"when in the course of fooman events\n")<br/> b'when in the course of barman events\n'<br/> <br/> If universal_newlines=True is passed, the return value will be a<br/> string rather than bytes.<br/> """<br/> if 'stdout' in kwargs:<br/> raise ValueError('stdout argument not allowed, it will be overridden.')<br/> if 'input' in kwargs:<br/> if 'stdin' in kwargs:<br/> raise ValueError('stdin and input arguments may not both be used.')<br/> inputdata = kwargs['input']<br/> del kwargs['input']<br/> kwargs['stdin'] = 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/>> raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E subprocess.CalledProcessError: Command '['implementations/php-macaroons/verify_third_party_macaroon', 'MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2lkIGZpcnN0X3BhcnR5CjAwMTVjaWQgZGlzY2hhcmdlX2lkCjAwNTF2aWQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACjAwMTVjbCBkaXNjaGFyZ2VfbG9jCjAwMmZzaWduYXR1cmUgJGZnHPI7E15-2tMskOtuGD5RBTK4x2Hf-e0VtoSm43cK', 'MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgNddQgB0o9qjwddy5A7NGm1juaTGaU-Ov1fN9RS5j9iEK', 'key', 'first_party', 'discharge_first_party']' 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 'Sodium\CRYPTO_SECRETBOX_NONCEBYTES' 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">('/usr/src/tests/test_basic_compatibility.py', 30, 'Skipped: Test not implemented for rust-macaroons')<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 = 'libmacaroons', macaroon_impl = 'go-macaroon', verify_impl = 'php-macaroons'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<br/> <br/> verify_command = 'verify_third_party_macaroon'<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('ascii').split('\n')<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 = (['implementations/php-macaroons/verify_third_party_macaroon', 'MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2...cnR5CjAwMmZzaWduYXR1cmUgjjR1B00v5oj9o_C_FEWvVqD1q8pk7j2RvzzsUFI1Dd4K', 'key', 'first_party', 'discharge_first_party'],), kwargs = {}<br/>inputdata = None, process = <subprocess.Popen object at 0x7f5f25820080>, output = b'', unused_err = None, retcode = 255<br/><br/> def check_output(*popenargs, timeout=None, **kwargs):<br/> r"""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/> >>> check_output(["ls", "-l", "/dev/null"])<br/> b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'<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/> >>> check_output(["/bin/sh", "-c",<br/> ... "ls -l non_existent_file ; exit 0"],<br/> ... stderr=STDOUT)<br/> b'ls: non_existent_file: No such file or directory\n'<br/> <br/> There is an additional optional argument, "input", allowing you to<br/> pass a string to the subprocess's stdin. If you use this argument<br/> you may not also use the Popen constructor's "stdin" argument, as<br/> it too will be used internally. Example:<br/> <br/> >>> check_output(["sed", "-e", "s/foo/bar/"],<br/> ... input=b"when in the course of fooman events\n")<br/> b'when in the course of barman events\n'<br/> <br/> If universal_newlines=True is passed, the return value will be a<br/> string rather than bytes.<br/> """<br/> if 'stdout' in kwargs:<br/> raise ValueError('stdout argument not allowed, it will be overridden.')<br/> if 'input' in kwargs:<br/> if 'stdin' in kwargs:<br/> raise ValueError('stdin and input arguments may not both be used.')<br/> inputdata = kwargs['input']<br/> del kwargs['input']<br/> kwargs['stdin'] = 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/>> raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E subprocess.CalledProcessError: Command '['implementations/php-macaroons/verify_third_party_macaroon', 'MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2lkIGZpcnN0X3BhcnR5CjAwMTVjaWQgZGlzY2hhcmdlX2lkCjAwNTF2aWQgPUhWrZl6yEAFa7xjWnnf0_MxYvwDjv2g7XWYq1Z3woDnXZ9OrHyYvLG_Vkq30_e4ZMW_jDsR_uuqA-GCILDiQq03ymvbP2lOCjAwMTVjbCBkaXNjaGFyZ2VfbG9jCjAwMmZzaWduYXR1cmUgRyl7u2x3FzGRMjlC_8yZ6DdMvfsrBLKxsPDcUOz4YnkK', 'MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgjjR1B00v5oj9o_C_FEWvVqD1q8pk7j2RvzzsUFI1Dd4K', 'key', 'first_party', 'discharge_first_party']' 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 'Sodium\CRYPTO_SECRETBOX_NONCEBYTES' 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">('/usr/src/tests/test_basic_compatibility.py', 30, 'Skipped: Test not implemented for rust-macaroons')<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 = 'libmacaroons', macaroon_impl = 'php-macaroons', verify_impl = 'php-macaroons'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<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 = (['implementations/php-macaroons/third_party_macaroon_serialized', 'loc', 'key', 'id', 'first_party', 'discharge_loc', ...],), kwargs = {}, inputdata = None, process = <subprocess.Popen object at 0x7f5f25829b70>, output = b''<br/>unused_err = None, retcode = 255<br/><br/> def check_output(*popenargs, timeout=None, **kwargs):<br/> r"""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/> >>> check_output(["ls", "-l", "/dev/null"])<br/> b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'<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/> >>> check_output(["/bin/sh", "-c",<br/> ... "ls -l non_existent_file ; exit 0"],<br/> ... stderr=STDOUT)<br/> b'ls: non_existent_file: No such file or directory\n'<br/> <br/> There is an additional optional argument, "input", allowing you to<br/> pass a string to the subprocess's stdin. If you use this argument<br/> you may not also use the Popen constructor's "stdin" argument, as<br/> it too will be used internally. Example:<br/> <br/> >>> check_output(["sed", "-e", "s/foo/bar/"],<br/> ... input=b"when in the course of fooman events\n")<br/> b'when in the course of barman events\n'<br/> <br/> If universal_newlines=True is passed, the return value will be a<br/> string rather than bytes.<br/> """<br/> if 'stdout' in kwargs:<br/> raise ValueError('stdout argument not allowed, it will be overridden.')<br/> if 'input' in kwargs:<br/> if 'stdin' in kwargs:<br/> raise ValueError('stdin and input arguments may not both be used.')<br/> inputdata = kwargs['input']<br/> del kwargs['input']<br/> kwargs['stdin'] = 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/>> raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E subprocess.CalledProcessError: Command '['implementations/php-macaroons/third_party_macaroon_serialized', 'loc', 'key', 'id', 'first_party', 'discharge_loc', 'discharge_key', 'discharge_id', 'MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgZMyVaQHSRRPRQPl7S1zgIHnbz6lrtAFr-42xmzq5P5IK']' 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 = 'libmacaroons', macaroon_impl = 'php-macaroons', verify_impl = 'rust-macaroons'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<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 = (['implementations/php-macaroons/third_party_macaroon_serialized', 'loc', 'key', 'id', 'first_party', 'discharge_loc', ...],), kwargs = {}, inputdata = None, process = <subprocess.Popen object at 0x7f5f2584dbe0>, output = b''<br/>unused_err = None, retcode = 255<br/><br/> def check_output(*popenargs, timeout=None, **kwargs):<br/> r"""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/> >>> check_output(["ls", "-l", "/dev/null"])<br/> b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'<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/> >>> check_output(["/bin/sh", "-c",<br/> ... "ls -l non_existent_file ; exit 0"],<br/> ... stderr=STDOUT)<br/> b'ls: non_existent_file: No such file or directory\n'<br/> <br/> There is an additional optional argument, "input", allowing you to<br/> pass a string to the subprocess's stdin. If you use this argument<br/> you may not also use the Popen constructor's "stdin" argument, as<br/> it too will be used internally. Example:<br/> <br/> >>> check_output(["sed", "-e", "s/foo/bar/"],<br/> ... input=b"when in the course of fooman events\n")<br/> b'when in the course of barman events\n'<br/> <br/> If universal_newlines=True is passed, the return value will be a<br/> string rather than bytes.<br/> """<br/> if 'stdout' in kwargs:<br/> raise ValueError('stdout argument not allowed, it will be overridden.')<br/> if 'input' in kwargs:<br/> if 'stdin' in kwargs:<br/> raise ValueError('stdin and input arguments may not both be used.')<br/> inputdata = kwargs['input']<br/> del kwargs['input']<br/> kwargs['stdin'] = 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/>> raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E subprocess.CalledProcessError: Command '['implementations/php-macaroons/third_party_macaroon_serialized', 'loc', 'key', 'id', 'first_party', 'discharge_loc', 'discharge_key', 'discharge_id', 'MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgZMyVaQHSRRPRQPl7S1zgIHnbz6lrtAFr-42xmzq5P5IK']' 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">('/usr/src/tests/test_basic_compatibility.py', 30, 'Skipped: Test not implemented for rust-macaroons')<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 = 'pymacaroons', macaroon_impl = 'pymacaroons', verify_impl = 'macaroons-js'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<br/> <br/> verify_command = 'verify_third_party_macaroon'<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('ascii').split('\n')<br/> <br/>> assert(verified == "True")<br/><span class="error">E assert 'False' == 'True'</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 = 'pymacaroons', macaroon_impl = 'pymacaroons', verify_impl = 'php-macaroons'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<br/> <br/> verify_command = 'verify_third_party_macaroon'<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('ascii').split('\n')<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 = (['implementations/php-macaroons/verify_third_party_macaroon', 'MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2...cnR5CjAwMmZzaWduYXR1cmUgB4E0TtjwF3uEhRN3uG4sD_I4pYPwZS1CjLLRBxVCLKsK', 'key', 'first_party', 'discharge_first_party'],), kwargs = {}<br/>inputdata = None, process = <subprocess.Popen object at 0x7f5f25818438>, output = b'', unused_err = None, retcode = 255<br/><br/> def check_output(*popenargs, timeout=None, **kwargs):<br/> r"""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/> >>> check_output(["ls", "-l", "/dev/null"])<br/> b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'<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/> >>> check_output(["/bin/sh", "-c",<br/> ... "ls -l non_existent_file ; exit 0"],<br/> ... stderr=STDOUT)<br/> b'ls: non_existent_file: No such file or directory\n'<br/> <br/> There is an additional optional argument, "input", allowing you to<br/> pass a string to the subprocess's stdin. If you use this argument<br/> you may not also use the Popen constructor's "stdin" argument, as<br/> it too will be used internally. Example:<br/> <br/> >>> check_output(["sed", "-e", "s/foo/bar/"],<br/> ... input=b"when in the course of fooman events\n")<br/> b'when in the course of barman events\n'<br/> <br/> If universal_newlines=True is passed, the return value will be a<br/> string rather than bytes.<br/> """<br/> if 'stdout' in kwargs:<br/> raise ValueError('stdout argument not allowed, it will be overridden.')<br/> if 'input' in kwargs:<br/> if 'stdin' in kwargs:<br/> raise ValueError('stdin and input arguments may not both be used.')<br/> inputdata = kwargs['input']<br/> del kwargs['input']<br/> kwargs['stdin'] = 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/>> raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E subprocess.CalledProcessError: Command '['implementations/php-macaroons/verify_third_party_macaroon', 'MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2lkIGZpcnN0X3BhcnR5CjAwMTVjaWQgZGlzY2hhcmdlX2lkCjAwNTF2aWQgA_tVuQq4ATvRBoYpVaXIjYWBf3HQKm66ueDX21hqLwmYU-NTMOFXdEUNMckbtm1sp2AiScSiYrnK4qnPpdlRQ_t8h1jfq1JaCjAwMTVjbCBkaXNjaGFyZ2VfbG9jCjAwMmZzaWduYXR1cmUghgva_4h6kNXX_9faoWhKBYy7WwNixYw6BPHZvYUYuKAK', 'MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgB4E0TtjwF3uEhRN3uG4sD_I4pYPwZS1CjLLRBxVCLKsK', 'key', 'first_party', 'discharge_first_party']' 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 'Sodium\CRYPTO_SECRETBOX_NONCEBYTES' 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">('/usr/src/tests/test_basic_compatibility.py', 30, 'Skipped: Test not implemented for rust-macaroons')<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 = 'pymacaroons', macaroon_impl = 'ruby-macaroons', verify_impl = 'macaroons-js'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<br/> <br/> verify_command = 'verify_third_party_macaroon'<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('ascii').split('\n')<br/> <br/>> assert(verified == "True")<br/><span class="error">E assert 'False' == 'True'</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 = 'pymacaroons', macaroon_impl = 'ruby-macaroons', verify_impl = 'php-macaroons'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<br/> <br/> verify_command = 'verify_third_party_macaroon'<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('ascii').split('\n')<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 = (['implementations/php-macaroons/verify_third_party_macaroon', 'MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2...cnR5CjAwMmZzaWduYXR1cmUg1nxh0i0oUM6FEGn6sF80as_Trk5UPJpUsoeadPrz4hYK', 'key', 'first_party', 'discharge_first_party'],), kwargs = {}<br/>inputdata = None, process = <subprocess.Popen object at 0x7f5f257f8ac8>, output = b'', unused_err = None, retcode = 255<br/><br/> def check_output(*popenargs, timeout=None, **kwargs):<br/> r"""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/> >>> check_output(["ls", "-l", "/dev/null"])<br/> b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'<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/> >>> check_output(["/bin/sh", "-c",<br/> ... "ls -l non_existent_file ; exit 0"],<br/> ... stderr=STDOUT)<br/> b'ls: non_existent_file: No such file or directory\n'<br/> <br/> There is an additional optional argument, "input", allowing you to<br/> pass a string to the subprocess's stdin. If you use this argument<br/> you may not also use the Popen constructor's "stdin" argument, as<br/> it too will be used internally. Example:<br/> <br/> >>> check_output(["sed", "-e", "s/foo/bar/"],<br/> ... input=b"when in the course of fooman events\n")<br/> b'when in the course of barman events\n'<br/> <br/> If universal_newlines=True is passed, the return value will be a<br/> string rather than bytes.<br/> """<br/> if 'stdout' in kwargs:<br/> raise ValueError('stdout argument not allowed, it will be overridden.')<br/> if 'input' in kwargs:<br/> if 'stdin' in kwargs:<br/> raise ValueError('stdin and input arguments may not both be used.')<br/> inputdata = kwargs['input']<br/> del kwargs['input']<br/> kwargs['stdin'] = 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/>> raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E subprocess.CalledProcessError: Command '['implementations/php-macaroons/verify_third_party_macaroon', 'MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2lkIGZpcnN0X3BhcnR5CjAwMTVjaWQgZGlzY2hhcmdlX2lkCjAwNTF2aWQgSwSk4AFjnK59Vk7h-gfjH5LKotcmv4msR--sqc5xhBy_b32W_PaB4g5MYZIyfn0pE7s2l0QuJzTJT0C3r5qPQB2wyZmc1KmaCjAwMTVjbCBkaXNjaGFyZ2VfbG9jCjAwMmZzaWduYXR1cmUgIZRROCMRe8uSnwoTeo0qZ8NAPVgJ5Vh_80MIF0hP8BwK', 'MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUg1nxh0i0oUM6FEGn6sF80as_Trk5UPJpUsoeadPrz4hYK', 'key', 'first_party', 'discharge_first_party']' 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 'Sodium\CRYPTO_SECRETBOX_NONCEBYTES' 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">('/usr/src/tests/test_basic_compatibility.py', 30, 'Skipped: Test not implemented for rust-macaroons')<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 = 'pymacaroons', macaroon_impl = 'macaroons-js', verify_impl = 'macaroons-js'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<br/> <br/> verify_command = 'verify_third_party_macaroon'<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('ascii').split('\n')<br/> <br/>> assert(verified == "True")<br/><span class="error">E assert 'False' == 'True'</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 = 'pymacaroons', macaroon_impl = 'macaroons-js', verify_impl = 'go-macaroon'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<br/> <br/> verify_command = 'verify_third_party_macaroon'<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('ascii').split('\n')<br/> <br/>> assert(verified == "True")<br/><span class="error">E assert 'failed to de...ption failure' == 'True'</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 = 'pymacaroons', macaroon_impl = 'macaroons-js', verify_impl = 'php-macaroons'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<br/> <br/> verify_command = 'verify_third_party_macaroon'<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('ascii').split('\n')<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 = (['implementations/php-macaroons/verify_third_party_macaroon', 'MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2...cnR5CjAwMmZzaWduYXR1cmUgNddQgB0o9qjwddy5A7NGm1juaTGaU-Ov1fN9RS5j9iEK', 'key', 'first_party', 'discharge_first_party'],), kwargs = {}<br/>inputdata = None, process = <subprocess.Popen object at 0x7f5f257c6a58>, output = b'', unused_err = None, retcode = 255<br/><br/> def check_output(*popenargs, timeout=None, **kwargs):<br/> r"""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/> >>> check_output(["ls", "-l", "/dev/null"])<br/> b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'<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/> >>> check_output(["/bin/sh", "-c",<br/> ... "ls -l non_existent_file ; exit 0"],<br/> ... stderr=STDOUT)<br/> b'ls: non_existent_file: No such file or directory\n'<br/> <br/> There is an additional optional argument, "input", allowing you to<br/> pass a string to the subprocess's stdin. If you use this argument<br/> you may not also use the Popen constructor's "stdin" argument, as<br/> it too will be used internally. Example:<br/> <br/> >>> check_output(["sed", "-e", "s/foo/bar/"],<br/> ... input=b"when in the course of fooman events\n")<br/> b'when in the course of barman events\n'<br/> <br/> If universal_newlines=True is passed, the return value will be a<br/> string rather than bytes.<br/> """<br/> if 'stdout' in kwargs:<br/> raise ValueError('stdout argument not allowed, it will be overridden.')<br/> if 'input' in kwargs:<br/> if 'stdin' in kwargs:<br/> raise ValueError('stdin and input arguments may not both be used.')<br/> inputdata = kwargs['input']<br/> del kwargs['input']<br/> kwargs['stdin'] = 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/>> raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E subprocess.CalledProcessError: Command '['implementations/php-macaroons/verify_third_party_macaroon', 'MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2lkIGZpcnN0X3BhcnR5CjAwMTVjaWQgZGlzY2hhcmdlX2lkCjAwNTF2aWQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACjAwMTVjbCBkaXNjaGFyZ2VfbG9jCjAwMmZzaWduYXR1cmUgJGZnHPI7E15-2tMskOtuGD5RBTK4x2Hf-e0VtoSm43cK', 'MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgNddQgB0o9qjwddy5A7NGm1juaTGaU-Ov1fN9RS5j9iEK', 'key', 'first_party', 'discharge_first_party']' 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 'Sodium\CRYPTO_SECRETBOX_NONCEBYTES' 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">('/usr/src/tests/test_basic_compatibility.py', 30, 'Skipped: Test not implemented for rust-macaroons')<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 = 'pymacaroons', macaroon_impl = 'go-macaroon', verify_impl = 'php-macaroons'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<br/> <br/> verify_command = 'verify_third_party_macaroon'<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('ascii').split('\n')<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 = (['implementations/php-macaroons/verify_third_party_macaroon', 'MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2...cnR5CjAwMmZzaWduYXR1cmUgjjR1B00v5oj9o_C_FEWvVqD1q8pk7j2RvzzsUFI1Dd4K', 'key', 'first_party', 'discharge_first_party'],), kwargs = {}<br/>inputdata = None, process = <subprocess.Popen object at 0x7f5f2579dc18>, output = b'', unused_err = None, retcode = 255<br/><br/> def check_output(*popenargs, timeout=None, **kwargs):<br/> r"""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/> >>> check_output(["ls", "-l", "/dev/null"])<br/> b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'<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/> >>> check_output(["/bin/sh", "-c",<br/> ... "ls -l non_existent_file ; exit 0"],<br/> ... stderr=STDOUT)<br/> b'ls: non_existent_file: No such file or directory\n'<br/> <br/> There is an additional optional argument, "input", allowing you to<br/> pass a string to the subprocess's stdin. If you use this argument<br/> you may not also use the Popen constructor's "stdin" argument, as<br/> it too will be used internally. Example:<br/> <br/> >>> check_output(["sed", "-e", "s/foo/bar/"],<br/> ... input=b"when in the course of fooman events\n")<br/> b'when in the course of barman events\n'<br/> <br/> If universal_newlines=True is passed, the return value will be a<br/> string rather than bytes.<br/> """<br/> if 'stdout' in kwargs:<br/> raise ValueError('stdout argument not allowed, it will be overridden.')<br/> if 'input' in kwargs:<br/> if 'stdin' in kwargs:<br/> raise ValueError('stdin and input arguments may not both be used.')<br/> inputdata = kwargs['input']<br/> del kwargs['input']<br/> kwargs['stdin'] = 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/>> raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E subprocess.CalledProcessError: Command '['implementations/php-macaroons/verify_third_party_macaroon', 'MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2lkIGZpcnN0X3BhcnR5CjAwMTVjaWQgZGlzY2hhcmdlX2lkCjAwNTF2aWQgPUhWrZl6yEAFa7xjWnnf0_MxYvwDjv2g7XWYq1Z3woDnXZ9OrHyYvLG_Vkq30_e4ZMW_jDsR_uuqA-GCILDiQq03ymvbP2lOCjAwMTVjbCBkaXNjaGFyZ2VfbG9jCjAwMmZzaWduYXR1cmUgRyl7u2x3FzGRMjlC_8yZ6DdMvfsrBLKxsPDcUOz4YnkK', 'MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgjjR1B00v5oj9o_C_FEWvVqD1q8pk7j2RvzzsUFI1Dd4K', 'key', 'first_party', 'discharge_first_party']' 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 'Sodium\CRYPTO_SECRETBOX_NONCEBYTES' 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">('/usr/src/tests/test_basic_compatibility.py', 30, 'Skipped: Test not implemented for rust-macaroons')<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 = 'pymacaroons', macaroon_impl = 'php-macaroons', verify_impl = 'php-macaroons'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<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 = (['implementations/php-macaroons/third_party_macaroon_serialized', 'loc', 'key', 'id', 'first_party', 'discharge_loc', ...],), kwargs = {}, inputdata = None, process = <subprocess.Popen object at 0x7f5f257ae710>, output = b''<br/>unused_err = None, retcode = 255<br/><br/> def check_output(*popenargs, timeout=None, **kwargs):<br/> r"""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/> >>> check_output(["ls", "-l", "/dev/null"])<br/> b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'<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/> >>> check_output(["/bin/sh", "-c",<br/> ... "ls -l non_existent_file ; exit 0"],<br/> ... stderr=STDOUT)<br/> b'ls: non_existent_file: No such file or directory\n'<br/> <br/> There is an additional optional argument, "input", allowing you to<br/> pass a string to the subprocess's stdin. If you use this argument<br/> you may not also use the Popen constructor's "stdin" argument, as<br/> it too will be used internally. Example:<br/> <br/> >>> check_output(["sed", "-e", "s/foo/bar/"],<br/> ... input=b"when in the course of fooman events\n")<br/> b'when in the course of barman events\n'<br/> <br/> If universal_newlines=True is passed, the return value will be a<br/> string rather than bytes.<br/> """<br/> if 'stdout' in kwargs:<br/> raise ValueError('stdout argument not allowed, it will be overridden.')<br/> if 'input' in kwargs:<br/> if 'stdin' in kwargs:<br/> raise ValueError('stdin and input arguments may not both be used.')<br/> inputdata = kwargs['input']<br/> del kwargs['input']<br/> kwargs['stdin'] = 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/>> raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E subprocess.CalledProcessError: Command '['implementations/php-macaroons/third_party_macaroon_serialized', 'loc', 'key', 'id', 'first_party', 'discharge_loc', 'discharge_key', 'discharge_id', 'MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgZMyVaQHSRRPRQPl7S1zgIHnbz6lrtAFr-42xmzq5P5IK']' 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 = 'pymacaroons', macaroon_impl = 'php-macaroons', verify_impl = 'rust-macaroons'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<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 = (['implementations/php-macaroons/third_party_macaroon_serialized', 'loc', 'key', 'id', 'first_party', 'discharge_loc', ...],), kwargs = {}, inputdata = None, process = <subprocess.Popen object at 0x7f5f255e1588>, output = b''<br/>unused_err = None, retcode = 255<br/><br/> def check_output(*popenargs, timeout=None, **kwargs):<br/> r"""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/> >>> check_output(["ls", "-l", "/dev/null"])<br/> b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'<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/> >>> check_output(["/bin/sh", "-c",<br/> ... "ls -l non_existent_file ; exit 0"],<br/> ... stderr=STDOUT)<br/> b'ls: non_existent_file: No such file or directory\n'<br/> <br/> There is an additional optional argument, "input", allowing you to<br/> pass a string to the subprocess's stdin. If you use this argument<br/> you may not also use the Popen constructor's "stdin" argument, as<br/> it too will be used internally. Example:<br/> <br/> >>> check_output(["sed", "-e", "s/foo/bar/"],<br/> ... input=b"when in the course of fooman events\n")<br/> b'when in the course of barman events\n'<br/> <br/> If universal_newlines=True is passed, the return value will be a<br/> string rather than bytes.<br/> """<br/> if 'stdout' in kwargs:<br/> raise ValueError('stdout argument not allowed, it will be overridden.')<br/> if 'input' in kwargs:<br/> if 'stdin' in kwargs:<br/> raise ValueError('stdin and input arguments may not both be used.')<br/> inputdata = kwargs['input']<br/> del kwargs['input']<br/> kwargs['stdin'] = 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/>> raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E subprocess.CalledProcessError: Command '['implementations/php-macaroons/third_party_macaroon_serialized', 'loc', 'key', 'id', 'first_party', 'discharge_loc', 'discharge_key', 'discharge_id', 'MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgZMyVaQHSRRPRQPl7S1zgIHnbz6lrtAFr-42xmzq5P5IK']' 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">('/usr/src/tests/test_basic_compatibility.py', 30, 'Skipped: Test not implemented for rust-macaroons')<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 = 'ruby-macaroons', macaroon_impl = 'ruby-macaroons', verify_impl = 'macaroons-js'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<br/> <br/> verify_command = 'verify_third_party_macaroon'<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('ascii').split('\n')<br/> <br/>> assert(verified == "True")<br/><span class="error">E assert 'False' == 'True'</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 = 'ruby-macaroons', macaroon_impl = 'ruby-macaroons', verify_impl = 'php-macaroons'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<br/> <br/> verify_command = 'verify_third_party_macaroon'<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('ascii').split('\n')<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 = (['implementations/php-macaroons/verify_third_party_macaroon', 'MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2...cnR5CjAwMmZzaWduYXR1cmUg1nxh0i0oUM6FEGn6sF80as_Trk5UPJpUsoeadPrz4hYK', 'key', 'first_party', 'discharge_first_party'],), kwargs = {}<br/>inputdata = None, process = <subprocess.Popen object at 0x7f5f2561cc50>, output = b'', unused_err = None, retcode = 255<br/><br/> def check_output(*popenargs, timeout=None, **kwargs):<br/> r"""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/> >>> check_output(["ls", "-l", "/dev/null"])<br/> b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'<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/> >>> check_output(["/bin/sh", "-c",<br/> ... "ls -l non_existent_file ; exit 0"],<br/> ... stderr=STDOUT)<br/> b'ls: non_existent_file: No such file or directory\n'<br/> <br/> There is an additional optional argument, "input", allowing you to<br/> pass a string to the subprocess's stdin. If you use this argument<br/> you may not also use the Popen constructor's "stdin" argument, as<br/> it too will be used internally. Example:<br/> <br/> >>> check_output(["sed", "-e", "s/foo/bar/"],<br/> ... input=b"when in the course of fooman events\n")<br/> b'when in the course of barman events\n'<br/> <br/> If universal_newlines=True is passed, the return value will be a<br/> string rather than bytes.<br/> """<br/> if 'stdout' in kwargs:<br/> raise ValueError('stdout argument not allowed, it will be overridden.')<br/> if 'input' in kwargs:<br/> if 'stdin' in kwargs:<br/> raise ValueError('stdin and input arguments may not both be used.')<br/> inputdata = kwargs['input']<br/> del kwargs['input']<br/> kwargs['stdin'] = 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/>> raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E subprocess.CalledProcessError: Command '['implementations/php-macaroons/verify_third_party_macaroon', 'MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2lkIGZpcnN0X3BhcnR5CjAwMTVjaWQgZGlzY2hhcmdlX2lkCjAwNTF2aWQgSwSk4AFjnK59Vk7h-gfjH5LKotcmv4msR--sqc5xhBy_b32W_PaB4g5MYZIyfn0pE7s2l0QuJzTJT0C3r5qPQB2wyZmc1KmaCjAwMTVjbCBkaXNjaGFyZ2VfbG9jCjAwMmZzaWduYXR1cmUgIZRROCMRe8uSnwoTeo0qZ8NAPVgJ5Vh_80MIF0hP8BwK', 'MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUg1nxh0i0oUM6FEGn6sF80as_Trk5UPJpUsoeadPrz4hYK', 'key', 'first_party', 'discharge_first_party']' 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 'Sodium\CRYPTO_SECRETBOX_NONCEBYTES' 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">('/usr/src/tests/test_basic_compatibility.py', 30, 'Skipped: Test not implemented for rust-macaroons')<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 = 'ruby-macaroons', macaroon_impl = 'macaroons-js', verify_impl = 'macaroons-js'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<br/> <br/> verify_command = 'verify_third_party_macaroon'<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('ascii').split('\n')<br/> <br/>> assert(verified == "True")<br/><span class="error">E assert 'False' == 'True'</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 = 'ruby-macaroons', macaroon_impl = 'macaroons-js', verify_impl = 'go-macaroon'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<br/> <br/> verify_command = 'verify_third_party_macaroon'<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('ascii').split('\n')<br/> <br/>> assert(verified == "True")<br/><span class="error">E assert 'failed to de...ption failure' == 'True'</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 = 'ruby-macaroons', macaroon_impl = 'macaroons-js', verify_impl = 'php-macaroons'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<br/> <br/> verify_command = 'verify_third_party_macaroon'<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('ascii').split('\n')<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 = (['implementations/php-macaroons/verify_third_party_macaroon', 'MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2...cnR5CjAwMmZzaWduYXR1cmUgNddQgB0o9qjwddy5A7NGm1juaTGaU-Ov1fN9RS5j9iEK', 'key', 'first_party', 'discharge_first_party'],), kwargs = {}<br/>inputdata = None, process = <subprocess.Popen object at 0x7f5f25602940>, output = b'', unused_err = None, retcode = 255<br/><br/> def check_output(*popenargs, timeout=None, **kwargs):<br/> r"""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/> >>> check_output(["ls", "-l", "/dev/null"])<br/> b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'<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/> >>> check_output(["/bin/sh", "-c",<br/> ... "ls -l non_existent_file ; exit 0"],<br/> ... stderr=STDOUT)<br/> b'ls: non_existent_file: No such file or directory\n'<br/> <br/> There is an additional optional argument, "input", allowing you to<br/> pass a string to the subprocess's stdin. If you use this argument<br/> you may not also use the Popen constructor's "stdin" argument, as<br/> it too will be used internally. Example:<br/> <br/> >>> check_output(["sed", "-e", "s/foo/bar/"],<br/> ... input=b"when in the course of fooman events\n")<br/> b'when in the course of barman events\n'<br/> <br/> If universal_newlines=True is passed, the return value will be a<br/> string rather than bytes.<br/> """<br/> if 'stdout' in kwargs:<br/> raise ValueError('stdout argument not allowed, it will be overridden.')<br/> if 'input' in kwargs:<br/> if 'stdin' in kwargs:<br/> raise ValueError('stdin and input arguments may not both be used.')<br/> inputdata = kwargs['input']<br/> del kwargs['input']<br/> kwargs['stdin'] = 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/>> raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E subprocess.CalledProcessError: Command '['implementations/php-macaroons/verify_third_party_macaroon', 'MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2lkIGZpcnN0X3BhcnR5CjAwMTVjaWQgZGlzY2hhcmdlX2lkCjAwNTF2aWQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACjAwMTVjbCBkaXNjaGFyZ2VfbG9jCjAwMmZzaWduYXR1cmUgJGZnHPI7E15-2tMskOtuGD5RBTK4x2Hf-e0VtoSm43cK', 'MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgNddQgB0o9qjwddy5A7NGm1juaTGaU-Ov1fN9RS5j9iEK', 'key', 'first_party', 'discharge_first_party']' 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 'Sodium\CRYPTO_SECRETBOX_NONCEBYTES' 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">('/usr/src/tests/test_basic_compatibility.py', 30, 'Skipped: Test not implemented for rust-macaroons')<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 = 'ruby-macaroons', macaroon_impl = 'go-macaroon', verify_impl = 'php-macaroons'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<br/> <br/> verify_command = 'verify_third_party_macaroon'<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('ascii').split('\n')<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 = (['implementations/php-macaroons/verify_third_party_macaroon', 'MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2...cnR5CjAwMmZzaWduYXR1cmUgjjR1B00v5oj9o_C_FEWvVqD1q8pk7j2RvzzsUFI1Dd4K', 'key', 'first_party', 'discharge_first_party'],), kwargs = {}<br/>inputdata = None, process = <subprocess.Popen object at 0x7f5f25626358>, output = b'', unused_err = None, retcode = 255<br/><br/> def check_output(*popenargs, timeout=None, **kwargs):<br/> r"""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/> >>> check_output(["ls", "-l", "/dev/null"])<br/> b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'<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/> >>> check_output(["/bin/sh", "-c",<br/> ... "ls -l non_existent_file ; exit 0"],<br/> ... stderr=STDOUT)<br/> b'ls: non_existent_file: No such file or directory\n'<br/> <br/> There is an additional optional argument, "input", allowing you to<br/> pass a string to the subprocess's stdin. If you use this argument<br/> you may not also use the Popen constructor's "stdin" argument, as<br/> it too will be used internally. Example:<br/> <br/> >>> check_output(["sed", "-e", "s/foo/bar/"],<br/> ... input=b"when in the course of fooman events\n")<br/> b'when in the course of barman events\n'<br/> <br/> If universal_newlines=True is passed, the return value will be a<br/> string rather than bytes.<br/> """<br/> if 'stdout' in kwargs:<br/> raise ValueError('stdout argument not allowed, it will be overridden.')<br/> if 'input' in kwargs:<br/> if 'stdin' in kwargs:<br/> raise ValueError('stdin and input arguments may not both be used.')<br/> inputdata = kwargs['input']<br/> del kwargs['input']<br/> kwargs['stdin'] = 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/>> raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E subprocess.CalledProcessError: Command '['implementations/php-macaroons/verify_third_party_macaroon', 'MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2lkIGZpcnN0X3BhcnR5CjAwMTVjaWQgZGlzY2hhcmdlX2lkCjAwNTF2aWQgPUhWrZl6yEAFa7xjWnnf0_MxYvwDjv2g7XWYq1Z3woDnXZ9OrHyYvLG_Vkq30_e4ZMW_jDsR_uuqA-GCILDiQq03ymvbP2lOCjAwMTVjbCBkaXNjaGFyZ2VfbG9jCjAwMmZzaWduYXR1cmUgRyl7u2x3FzGRMjlC_8yZ6DdMvfsrBLKxsPDcUOz4YnkK', 'MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgjjR1B00v5oj9o_C_FEWvVqD1q8pk7j2RvzzsUFI1Dd4K', 'key', 'first_party', 'discharge_first_party']' 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 'Sodium\CRYPTO_SECRETBOX_NONCEBYTES' 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">('/usr/src/tests/test_basic_compatibility.py', 30, 'Skipped: Test not implemented for rust-macaroons')<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 = 'ruby-macaroons', macaroon_impl = 'php-macaroons', verify_impl = 'php-macaroons'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<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 = (['implementations/php-macaroons/third_party_macaroon_serialized', 'loc', 'key', 'id', 'first_party', 'discharge_loc', ...],), kwargs = {}, inputdata = None, process = <subprocess.Popen object at 0x7f5f2561de48>, output = b''<br/>unused_err = None, retcode = 255<br/><br/> def check_output(*popenargs, timeout=None, **kwargs):<br/> r"""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/> >>> check_output(["ls", "-l", "/dev/null"])<br/> b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'<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/> >>> check_output(["/bin/sh", "-c",<br/> ... "ls -l non_existent_file ; exit 0"],<br/> ... stderr=STDOUT)<br/> b'ls: non_existent_file: No such file or directory\n'<br/> <br/> There is an additional optional argument, "input", allowing you to<br/> pass a string to the subprocess's stdin. If you use this argument<br/> you may not also use the Popen constructor's "stdin" argument, as<br/> it too will be used internally. Example:<br/> <br/> >>> check_output(["sed", "-e", "s/foo/bar/"],<br/> ... input=b"when in the course of fooman events\n")<br/> b'when in the course of barman events\n'<br/> <br/> If universal_newlines=True is passed, the return value will be a<br/> string rather than bytes.<br/> """<br/> if 'stdout' in kwargs:<br/> raise ValueError('stdout argument not allowed, it will be overridden.')<br/> if 'input' in kwargs:<br/> if 'stdin' in kwargs:<br/> raise ValueError('stdin and input arguments may not both be used.')<br/> inputdata = kwargs['input']<br/> del kwargs['input']<br/> kwargs['stdin'] = 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/>> raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E subprocess.CalledProcessError: Command '['implementations/php-macaroons/third_party_macaroon_serialized', 'loc', 'key', 'id', 'first_party', 'discharge_loc', 'discharge_key', 'discharge_id', 'MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgZMyVaQHSRRPRQPl7S1zgIHnbz6lrtAFr-42xmzq5P5IK']' 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 = 'ruby-macaroons', macaroon_impl = 'php-macaroons', verify_impl = 'rust-macaroons'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<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 = (['implementations/php-macaroons/third_party_macaroon_serialized', 'loc', 'key', 'id', 'first_party', 'discharge_loc', ...],), kwargs = {}, inputdata = None, process = <subprocess.Popen object at 0x7f5f2562ae48>, output = b''<br/>unused_err = None, retcode = 255<br/><br/> def check_output(*popenargs, timeout=None, **kwargs):<br/> r"""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/> >>> check_output(["ls", "-l", "/dev/null"])<br/> b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'<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/> >>> check_output(["/bin/sh", "-c",<br/> ... "ls -l non_existent_file ; exit 0"],<br/> ... stderr=STDOUT)<br/> b'ls: non_existent_file: No such file or directory\n'<br/> <br/> There is an additional optional argument, "input", allowing you to<br/> pass a string to the subprocess's stdin. If you use this argument<br/> you may not also use the Popen constructor's "stdin" argument, as<br/> it too will be used internally. Example:<br/> <br/> >>> check_output(["sed", "-e", "s/foo/bar/"],<br/> ... input=b"when in the course of fooman events\n")<br/> b'when in the course of barman events\n'<br/> <br/> If universal_newlines=True is passed, the return value will be a<br/> string rather than bytes.<br/> """<br/> if 'stdout' in kwargs:<br/> raise ValueError('stdout argument not allowed, it will be overridden.')<br/> if 'input' in kwargs:<br/> if 'stdin' in kwargs:<br/> raise ValueError('stdin and input arguments may not both be used.')<br/> inputdata = kwargs['input']<br/> del kwargs['input']<br/> kwargs['stdin'] = 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/>> raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E subprocess.CalledProcessError: Command '['implementations/php-macaroons/third_party_macaroon_serialized', 'loc', 'key', 'id', 'first_party', 'discharge_loc', 'discharge_key', 'discharge_id', 'MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgZMyVaQHSRRPRQPl7S1zgIHnbz6lrtAFr-42xmzq5P5IK']' 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">('/usr/src/tests/test_basic_compatibility.py', 30, 'Skipped: Test not implemented for rust-macaroons')<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 = 'macaroons-js', macaroon_impl = 'macaroons-js', verify_impl = 'macaroons-js'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<br/> <br/> verify_command = 'verify_third_party_macaroon'<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('ascii').split('\n')<br/> <br/>> assert(verified == "True")<br/><span class="error">E assert 'False' == 'True'</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 = 'macaroons-js', macaroon_impl = 'macaroons-js', verify_impl = 'go-macaroon'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<br/> <br/> verify_command = 'verify_third_party_macaroon'<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('ascii').split('\n')<br/> <br/>> assert(verified == "True")<br/><span class="error">E assert 'failed to de...ption failure' == 'True'</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 = 'macaroons-js', macaroon_impl = 'macaroons-js', verify_impl = 'php-macaroons'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<br/> <br/> verify_command = 'verify_third_party_macaroon'<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('ascii').split('\n')<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 = (['implementations/php-macaroons/verify_third_party_macaroon', 'MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2...cnR5CjAwMmZzaWduYXR1cmUgNddQgB0o9qjwddy5A7NGm1juaTGaU-Ov1fN9RS5j9iEK', 'key', 'first_party', 'discharge_first_party'],), kwargs = {}<br/>inputdata = None, process = <subprocess.Popen object at 0x7f5f25712a58>, output = b'', unused_err = None, retcode = 255<br/><br/> def check_output(*popenargs, timeout=None, **kwargs):<br/> r"""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/> >>> check_output(["ls", "-l", "/dev/null"])<br/> b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'<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/> >>> check_output(["/bin/sh", "-c",<br/> ... "ls -l non_existent_file ; exit 0"],<br/> ... stderr=STDOUT)<br/> b'ls: non_existent_file: No such file or directory\n'<br/> <br/> There is an additional optional argument, "input", allowing you to<br/> pass a string to the subprocess's stdin. If you use this argument<br/> you may not also use the Popen constructor's "stdin" argument, as<br/> it too will be used internally. Example:<br/> <br/> >>> check_output(["sed", "-e", "s/foo/bar/"],<br/> ... input=b"when in the course of fooman events\n")<br/> b'when in the course of barman events\n'<br/> <br/> If universal_newlines=True is passed, the return value will be a<br/> string rather than bytes.<br/> """<br/> if 'stdout' in kwargs:<br/> raise ValueError('stdout argument not allowed, it will be overridden.')<br/> if 'input' in kwargs:<br/> if 'stdin' in kwargs:<br/> raise ValueError('stdin and input arguments may not both be used.')<br/> inputdata = kwargs['input']<br/> del kwargs['input']<br/> kwargs['stdin'] = 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/>> raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E subprocess.CalledProcessError: Command '['implementations/php-macaroons/verify_third_party_macaroon', 'MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2lkIGZpcnN0X3BhcnR5CjAwMTVjaWQgZGlzY2hhcmdlX2lkCjAwNTF2aWQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACjAwMTVjbCBkaXNjaGFyZ2VfbG9jCjAwMmZzaWduYXR1cmUgJGZnHPI7E15-2tMskOtuGD5RBTK4x2Hf-e0VtoSm43cK', 'MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgNddQgB0o9qjwddy5A7NGm1juaTGaU-Ov1fN9RS5j9iEK', 'key', 'first_party', 'discharge_first_party']' 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 'Sodium\CRYPTO_SECRETBOX_NONCEBYTES' 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">('/usr/src/tests/test_basic_compatibility.py', 30, 'Skipped: Test not implemented for rust-macaroons')<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 = 'macaroons-js', macaroon_impl = 'go-macaroon', verify_impl = 'php-macaroons'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<br/> <br/> verify_command = 'verify_third_party_macaroon'<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('ascii').split('\n')<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 = (['implementations/php-macaroons/verify_third_party_macaroon', 'MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2...cnR5CjAwMmZzaWduYXR1cmUgjjR1B00v5oj9o_C_FEWvVqD1q8pk7j2RvzzsUFI1Dd4K', 'key', 'first_party', 'discharge_first_party'],), kwargs = {}<br/>inputdata = None, process = <subprocess.Popen object at 0x7f5f256e6d30>, output = b'', unused_err = None, retcode = 255<br/><br/> def check_output(*popenargs, timeout=None, **kwargs):<br/> r"""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/> >>> check_output(["ls", "-l", "/dev/null"])<br/> b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'<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/> >>> check_output(["/bin/sh", "-c",<br/> ... "ls -l non_existent_file ; exit 0"],<br/> ... stderr=STDOUT)<br/> b'ls: non_existent_file: No such file or directory\n'<br/> <br/> There is an additional optional argument, "input", allowing you to<br/> pass a string to the subprocess's stdin. If you use this argument<br/> you may not also use the Popen constructor's "stdin" argument, as<br/> it too will be used internally. Example:<br/> <br/> >>> check_output(["sed", "-e", "s/foo/bar/"],<br/> ... input=b"when in the course of fooman events\n")<br/> b'when in the course of barman events\n'<br/> <br/> If universal_newlines=True is passed, the return value will be a<br/> string rather than bytes.<br/> """<br/> if 'stdout' in kwargs:<br/> raise ValueError('stdout argument not allowed, it will be overridden.')<br/> if 'input' in kwargs:<br/> if 'stdin' in kwargs:<br/> raise ValueError('stdin and input arguments may not both be used.')<br/> inputdata = kwargs['input']<br/> del kwargs['input']<br/> kwargs['stdin'] = 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/>> raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E subprocess.CalledProcessError: Command '['implementations/php-macaroons/verify_third_party_macaroon', 'MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2lkIGZpcnN0X3BhcnR5CjAwMTVjaWQgZGlzY2hhcmdlX2lkCjAwNTF2aWQgPUhWrZl6yEAFa7xjWnnf0_MxYvwDjv2g7XWYq1Z3woDnXZ9OrHyYvLG_Vkq30_e4ZMW_jDsR_uuqA-GCILDiQq03ymvbP2lOCjAwMTVjbCBkaXNjaGFyZ2VfbG9jCjAwMmZzaWduYXR1cmUgRyl7u2x3FzGRMjlC_8yZ6DdMvfsrBLKxsPDcUOz4YnkK', 'MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgjjR1B00v5oj9o_C_FEWvVqD1q8pk7j2RvzzsUFI1Dd4K', 'key', 'first_party', 'discharge_first_party']' 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 'Sodium\CRYPTO_SECRETBOX_NONCEBYTES' 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">('/usr/src/tests/test_basic_compatibility.py', 30, 'Skipped: Test not implemented for rust-macaroons')<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 = 'macaroons-js', macaroon_impl = 'php-macaroons', verify_impl = 'php-macaroons'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<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 = (['implementations/php-macaroons/third_party_macaroon_serialized', 'loc', 'key', 'id', 'first_party', 'discharge_loc', ...],), kwargs = {}, inputdata = None, process = <subprocess.Popen object at 0x7f5f25707860>, output = b''<br/>unused_err = None, retcode = 255<br/><br/> def check_output(*popenargs, timeout=None, **kwargs):<br/> r"""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/> >>> check_output(["ls", "-l", "/dev/null"])<br/> b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'<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/> >>> check_output(["/bin/sh", "-c",<br/> ... "ls -l non_existent_file ; exit 0"],<br/> ... stderr=STDOUT)<br/> b'ls: non_existent_file: No such file or directory\n'<br/> <br/> There is an additional optional argument, "input", allowing you to<br/> pass a string to the subprocess's stdin. If you use this argument<br/> you may not also use the Popen constructor's "stdin" argument, as<br/> it too will be used internally. Example:<br/> <br/> >>> check_output(["sed", "-e", "s/foo/bar/"],<br/> ... input=b"when in the course of fooman events\n")<br/> b'when in the course of barman events\n'<br/> <br/> If universal_newlines=True is passed, the return value will be a<br/> string rather than bytes.<br/> """<br/> if 'stdout' in kwargs:<br/> raise ValueError('stdout argument not allowed, it will be overridden.')<br/> if 'input' in kwargs:<br/> if 'stdin' in kwargs:<br/> raise ValueError('stdin and input arguments may not both be used.')<br/> inputdata = kwargs['input']<br/> del kwargs['input']<br/> kwargs['stdin'] = 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/>> raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E subprocess.CalledProcessError: Command '['implementations/php-macaroons/third_party_macaroon_serialized', 'loc', 'key', 'id', 'first_party', 'discharge_loc', 'discharge_key', 'discharge_id', 'MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgZMyVaQHSRRPRQPl7S1zgIHnbz6lrtAFr-42xmzq5P5IK']' 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 = 'macaroons-js', macaroon_impl = 'php-macaroons', verify_impl = 'rust-macaroons'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<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 = (['implementations/php-macaroons/third_party_macaroon_serialized', 'loc', 'key', 'id', 'first_party', 'discharge_loc', ...],), kwargs = {}, inputdata = None, process = <subprocess.Popen object at 0x7f5f256f39b0>, output = b''<br/>unused_err = None, retcode = 255<br/><br/> def check_output(*popenargs, timeout=None, **kwargs):<br/> r"""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/> >>> check_output(["ls", "-l", "/dev/null"])<br/> b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'<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/> >>> check_output(["/bin/sh", "-c",<br/> ... "ls -l non_existent_file ; exit 0"],<br/> ... stderr=STDOUT)<br/> b'ls: non_existent_file: No such file or directory\n'<br/> <br/> There is an additional optional argument, "input", allowing you to<br/> pass a string to the subprocess's stdin. If you use this argument<br/> you may not also use the Popen constructor's "stdin" argument, as<br/> it too will be used internally. Example:<br/> <br/> >>> check_output(["sed", "-e", "s/foo/bar/"],<br/> ... input=b"when in the course of fooman events\n")<br/> b'when in the course of barman events\n'<br/> <br/> If universal_newlines=True is passed, the return value will be a<br/> string rather than bytes.<br/> """<br/> if 'stdout' in kwargs:<br/> raise ValueError('stdout argument not allowed, it will be overridden.')<br/> if 'input' in kwargs:<br/> if 'stdin' in kwargs:<br/> raise ValueError('stdin and input arguments may not both be used.')<br/> inputdata = kwargs['input']<br/> del kwargs['input']<br/> kwargs['stdin'] = 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/>> raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E subprocess.CalledProcessError: Command '['implementations/php-macaroons/third_party_macaroon_serialized', 'loc', 'key', 'id', 'first_party', 'discharge_loc', 'discharge_key', 'discharge_id', 'MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgZMyVaQHSRRPRQPl7S1zgIHnbz6lrtAFr-42xmzq5P5IK']' 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">('/usr/src/tests/test_basic_compatibility.py', 30, 'Skipped: Test not implemented for rust-macaroons')<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 = 'go-macaroon', macaroon_impl = 'go-macaroon', verify_impl = 'php-macaroons'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<br/> <br/> verify_command = 'verify_third_party_macaroon'<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('ascii').split('\n')<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 = (['implementations/php-macaroons/verify_third_party_macaroon', 'MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2...cnR5CjAwMmZzaWduYXR1cmUgjjR1B00v5oj9o_C_FEWvVqD1q8pk7j2RvzzsUFI1Dd4K', 'key', 'first_party', 'discharge_first_party'],), kwargs = {}<br/>inputdata = None, process = <subprocess.Popen object at 0x7f5f25749278>, output = b'', unused_err = None, retcode = 255<br/><br/> def check_output(*popenargs, timeout=None, **kwargs):<br/> r"""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/> >>> check_output(["ls", "-l", "/dev/null"])<br/> b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'<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/> >>> check_output(["/bin/sh", "-c",<br/> ... "ls -l non_existent_file ; exit 0"],<br/> ... stderr=STDOUT)<br/> b'ls: non_existent_file: No such file or directory\n'<br/> <br/> There is an additional optional argument, "input", allowing you to<br/> pass a string to the subprocess's stdin. If you use this argument<br/> you may not also use the Popen constructor's "stdin" argument, as<br/> it too will be used internally. Example:<br/> <br/> >>> check_output(["sed", "-e", "s/foo/bar/"],<br/> ... input=b"when in the course of fooman events\n")<br/> b'when in the course of barman events\n'<br/> <br/> If universal_newlines=True is passed, the return value will be a<br/> string rather than bytes.<br/> """<br/> if 'stdout' in kwargs:<br/> raise ValueError('stdout argument not allowed, it will be overridden.')<br/> if 'input' in kwargs:<br/> if 'stdin' in kwargs:<br/> raise ValueError('stdin and input arguments may not both be used.')<br/> inputdata = kwargs['input']<br/> del kwargs['input']<br/> kwargs['stdin'] = 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/>> raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E subprocess.CalledProcessError: Command '['implementations/php-macaroons/verify_third_party_macaroon', 'MDAxMWxvY2F0aW9uIGxvYwowMDEyaWRlbnRpZmllciBpZAowMDE0Y2lkIGZpcnN0X3BhcnR5CjAwMTVjaWQgZGlzY2hhcmdlX2lkCjAwNTF2aWQgPUhWrZl6yEAFa7xjWnnf0_MxYvwDjv2g7XWYq1Z3woDnXZ9OrHyYvLG_Vkq30_e4ZMW_jDsR_uuqA-GCILDiQq03ymvbP2lOCjAwMTVjbCBkaXNjaGFyZ2VfbG9jCjAwMmZzaWduYXR1cmUgRyl7u2x3FzGRMjlC_8yZ6DdMvfsrBLKxsPDcUOz4YnkK', 'MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgjjR1B00v5oj9o_C_FEWvVqD1q8pk7j2RvzzsUFI1Dd4K', 'key', 'first_party', 'discharge_first_party']' 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 'Sodium\CRYPTO_SECRETBOX_NONCEBYTES' 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">('/usr/src/tests/test_basic_compatibility.py', 30, 'Skipped: Test not implemented for rust-macaroons')<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 = 'go-macaroon', macaroon_impl = 'php-macaroons', verify_impl = 'php-macaroons'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<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 = (['implementations/php-macaroons/third_party_macaroon_serialized', 'loc', 'key', 'id', 'first_party', 'discharge_loc', ...],), kwargs = {}, inputdata = None, process = <subprocess.Popen object at 0x7f5f25444e48>, output = b''<br/>unused_err = None, retcode = 255<br/><br/> def check_output(*popenargs, timeout=None, **kwargs):<br/> r"""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/> >>> check_output(["ls", "-l", "/dev/null"])<br/> b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'<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/> >>> check_output(["/bin/sh", "-c",<br/> ... "ls -l non_existent_file ; exit 0"],<br/> ... stderr=STDOUT)<br/> b'ls: non_existent_file: No such file or directory\n'<br/> <br/> There is an additional optional argument, "input", allowing you to<br/> pass a string to the subprocess's stdin. If you use this argument<br/> you may not also use the Popen constructor's "stdin" argument, as<br/> it too will be used internally. Example:<br/> <br/> >>> check_output(["sed", "-e", "s/foo/bar/"],<br/> ... input=b"when in the course of fooman events\n")<br/> b'when in the course of barman events\n'<br/> <br/> If universal_newlines=True is passed, the return value will be a<br/> string rather than bytes.<br/> """<br/> if 'stdout' in kwargs:<br/> raise ValueError('stdout argument not allowed, it will be overridden.')<br/> if 'input' in kwargs:<br/> if 'stdin' in kwargs:<br/> raise ValueError('stdin and input arguments may not both be used.')<br/> inputdata = kwargs['input']<br/> del kwargs['input']<br/> kwargs['stdin'] = 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/>> raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E subprocess.CalledProcessError: Command '['implementations/php-macaroons/third_party_macaroon_serialized', 'loc', 'key', 'id', 'first_party', 'discharge_loc', 'discharge_key', 'discharge_id', 'MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgZMyVaQHSRRPRQPl7S1zgIHnbz6lrtAFr-42xmzq5P5IK']' 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 = 'go-macaroon', macaroon_impl = 'php-macaroons', verify_impl = 'rust-macaroons'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<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 = (['implementations/php-macaroons/third_party_macaroon_serialized', 'loc', 'key', 'id', 'first_party', 'discharge_loc', ...],), kwargs = {}, inputdata = None, process = <subprocess.Popen object at 0x7f5f25741c50>, output = b''<br/>unused_err = None, retcode = 255<br/><br/> def check_output(*popenargs, timeout=None, **kwargs):<br/> r"""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/> >>> check_output(["ls", "-l", "/dev/null"])<br/> b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'<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/> >>> check_output(["/bin/sh", "-c",<br/> ... "ls -l non_existent_file ; exit 0"],<br/> ... stderr=STDOUT)<br/> b'ls: non_existent_file: No such file or directory\n'<br/> <br/> There is an additional optional argument, "input", allowing you to<br/> pass a string to the subprocess's stdin. If you use this argument<br/> you may not also use the Popen constructor's "stdin" argument, as<br/> it too will be used internally. Example:<br/> <br/> >>> check_output(["sed", "-e", "s/foo/bar/"],<br/> ... input=b"when in the course of fooman events\n")<br/> b'when in the course of barman events\n'<br/> <br/> If universal_newlines=True is passed, the return value will be a<br/> string rather than bytes.<br/> """<br/> if 'stdout' in kwargs:<br/> raise ValueError('stdout argument not allowed, it will be overridden.')<br/> if 'input' in kwargs:<br/> if 'stdin' in kwargs:<br/> raise ValueError('stdin and input arguments may not both be used.')<br/> inputdata = kwargs['input']<br/> del kwargs['input']<br/> kwargs['stdin'] = 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/>> raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E subprocess.CalledProcessError: Command '['implementations/php-macaroons/third_party_macaroon_serialized', 'loc', 'key', 'id', 'first_party', 'discharge_loc', 'discharge_key', 'discharge_id', 'MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgZMyVaQHSRRPRQPl7S1zgIHnbz6lrtAFr-42xmzq5P5IK']' 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">('/usr/src/tests/test_basic_compatibility.py', 30, 'Skipped: Test not implemented for rust-macaroons')<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 = 'php-macaroons', macaroon_impl = 'php-macaroons', verify_impl = 'php-macaroons'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<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 = (['implementations/php-macaroons/third_party_macaroon_serialized', 'loc', 'key', 'id', 'first_party', 'discharge_loc', ...],), kwargs = {}, inputdata = None, process = <subprocess.Popen object at 0x7f5f25753d68>, output = b''<br/>unused_err = None, retcode = 255<br/><br/> def check_output(*popenargs, timeout=None, **kwargs):<br/> r"""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/> >>> check_output(["ls", "-l", "/dev/null"])<br/> b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'<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/> >>> check_output(["/bin/sh", "-c",<br/> ... "ls -l non_existent_file ; exit 0"],<br/> ... stderr=STDOUT)<br/> b'ls: non_existent_file: No such file or directory\n'<br/> <br/> There is an additional optional argument, "input", allowing you to<br/> pass a string to the subprocess's stdin. If you use this argument<br/> you may not also use the Popen constructor's "stdin" argument, as<br/> it too will be used internally. Example:<br/> <br/> >>> check_output(["sed", "-e", "s/foo/bar/"],<br/> ... input=b"when in the course of fooman events\n")<br/> b'when in the course of barman events\n'<br/> <br/> If universal_newlines=True is passed, the return value will be a<br/> string rather than bytes.<br/> """<br/> if 'stdout' in kwargs:<br/> raise ValueError('stdout argument not allowed, it will be overridden.')<br/> if 'input' in kwargs:<br/> if 'stdin' in kwargs:<br/> raise ValueError('stdin and input arguments may not both be used.')<br/> inputdata = kwargs['input']<br/> del kwargs['input']<br/> kwargs['stdin'] = 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/>> raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E subprocess.CalledProcessError: Command '['implementations/php-macaroons/third_party_macaroon_serialized', 'loc', 'key', 'id', 'first_party', 'discharge_loc', 'discharge_key', 'discharge_id', 'MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgZMyVaQHSRRPRQPl7S1zgIHnbz6lrtAFr-42xmzq5P5IK']' 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 = 'php-macaroons', macaroon_impl = 'php-macaroons', verify_impl = 'rust-macaroons'<br/><br/> @pytest.mark.parametrize("discharge_impl,macaroon_impl,verify_impl",<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 = 'discharge_loc'<br/> discharge_key = 'discharge_key'<br/> discharge_id = 'discharge_id'<br/> discharge_first_party = 'discharge_first_party'<br/> first_party = 'first_party'<br/> key = 'key'<br/> <br/> discharge_command = 'first_party_macaroon_serialized'<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('ascii').split('\n')<br/> <br/> macaroon_command = 'third_party_macaroon_serialized'<br/> macaroon_args = (<br/> 'loc', key, 'id', 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('ascii').split('\n')<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 = (['implementations/php-macaroons/third_party_macaroon_serialized', 'loc', 'key', 'id', 'first_party', 'discharge_loc', ...],), kwargs = {}, inputdata = None, process = <subprocess.Popen object at 0x7f5f2573a0b8>, output = b''<br/>unused_err = None, retcode = 255<br/><br/> def check_output(*popenargs, timeout=None, **kwargs):<br/> r"""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/> >>> check_output(["ls", "-l", "/dev/null"])<br/> b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'<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/> >>> check_output(["/bin/sh", "-c",<br/> ... "ls -l non_existent_file ; exit 0"],<br/> ... stderr=STDOUT)<br/> b'ls: non_existent_file: No such file or directory\n'<br/> <br/> There is an additional optional argument, "input", allowing you to<br/> pass a string to the subprocess's stdin. If you use this argument<br/> you may not also use the Popen constructor's "stdin" argument, as<br/> it too will be used internally. Example:<br/> <br/> >>> check_output(["sed", "-e", "s/foo/bar/"],<br/> ... input=b"when in the course of fooman events\n")<br/> b'when in the course of barman events\n'<br/> <br/> If universal_newlines=True is passed, the return value will be a<br/> string rather than bytes.<br/> """<br/> if 'stdout' in kwargs:<br/> raise ValueError('stdout argument not allowed, it will be overridden.')<br/> if 'input' in kwargs:<br/> if 'stdin' in kwargs:<br/> raise ValueError('stdin and input arguments may not both be used.')<br/> inputdata = kwargs['input']<br/> del kwargs['input']<br/> kwargs['stdin'] = 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/>> raise CalledProcessError(retcode, process.args, output=output)<br/><span class="error">E subprocess.CalledProcessError: Command '['implementations/php-macaroons/third_party_macaroon_serialized', 'loc', 'key', 'id', 'first_party', 'discharge_loc', 'discharge_key', 'discharge_id', 'MDAxYmxvY2F0aW9uIGRpc2NoYXJnZV9sb2MKMDAxY2lkZW50aWZpZXIgZGlzY2hhcmdlX2lkCjAwMWVjaWQgZGlzY2hhcmdlX2ZpcnN0X3BhcnR5CjAwMmZzaWduYXR1cmUgZMyVaQHSRRPRQPl7S1zgIHnbz6lrtAFr-42xmzq5P5IK']' 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">('/usr/src/tests/test_basic_compatibility.py', 30, 'Skipped: Test not implemented for rust-macaroons')<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">('/usr/src/tests/test_basic_compatibility.py', 30, 'Skipped: Test not implemented for rust-macaroons')<br/></div></td></tr></tbody></table></body></html>
以上是关于html 蛋白杏仁饼干兼容性失败的主要内容,如果未能解决你的问题,请参考以下文章
COCOA ALMOND BISCOTTI┃意式巧克力杏仁脆饼
Mass Spectrometry-Compatible Subcellular Fractionation for Proteomics 质谱兼容的蛋白质组学的亚细胞分离(解读人:王茹凯)