-
Notifications
You must be signed in to change notification settings - Fork 43
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
agama config load
/store
for "software" uses the HTTP API
#1548
Conversation
to be used by SoftwareHTTPClient
with a new SoftwareHTTPClient. Underneath, the web service still uses the D-Bus SoftwareClient
Note the `when.(...).body("{JSON object}")` part where the JSON must match what the client sends, otherwise the mock server will respond with a 404, and the test will rightly fail with: ``` Error: BackendError(404, "{\"message\":\"Request did not match any route or mock\"}") ``` The problem is that if you compose that JSON according to your best understanding of the client but make a typo, you are still left with that unhelpful 404. These 3 parts were all need to arrive at a working string: 1. Enable httpmock logging by calling `env_logger::init();` at the start of the test function. 2. Show the request, by enabling the logging at runtime, at the right level: (`test_setting_software` is a partial match on the test name). ```console (cd rust; RUST_LOG=httpmock=debug cargo test test_setting_software) ``` If you don't like typing, the really important bits are these. httpmock will also log the more detailed Trace level but it does not get in the way ```console RUST_LOG=httpmock cargo test ``` 3. Unfortunately the request will be logged not as text but as an array of bytes shown numerically. [Process the output with this script to extract the text.][extract] [extract]: https://gist.github.com/mvidner/0e22ea82abecb44b469841929e5ec279#file-httpmock_body-rb
by starting NetworkManager before agama-web-server which depends on it
|
||
impl SoftwareHTTPClient { | ||
pub fn new() -> Result<Self, ServiceError> { | ||
Ok(Self { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
you can use here new_with_base
like Ok(Self.new_with_base(BaseHTTPClient::new()?))
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I see your point... IMHO my way is still not enough duplication to need the indirection :)
} | ||
|
||
pub async fn set_config(&self, config: &SoftwareConfig) -> Result<(), ServiceError> { | ||
// FIXME: test how errors come out: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
well, it can be improved by decoding body of error response and creating error from it, if it is also service error. I plan to do it, but other higher priorities come in the way.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That's what I thought too, but
- in the end the code seeing these errors does no decisions, just shows them to the user
- if we wanted to do some decisions, we would have to serialize them better than with
Display
/Debug
Prepare for releasing Agama 10· * #1263 * #1330 * #1407 * #1408 * #1410 * #1411 * #1412 * #1416 * #1417 * #1419 * #1420 * #1421 * #1422 * #1423 * #1424 * #1425 * #1428 * #1429 * #1430 * #1431 * #1432 * #1433 * #1436 * #1437 * #1438 * #1439 * #1440 * #1441 * #1443 * #1444 * #1445 * #1449 * #1450 * #1451 * #1452 * #1453 * #1454 * #1455 * #1456 * #1457 * #1459 * #1460 * #1462 * #1464 * #1465 * #1466 * #1467 * #1468 * #1469 * #1470 * #1471 * #1472 * #1473 * #1475 * #1476 * #1477 * #1478 * #1479 * #1480 * #1481 * #1482 * #1483 * #1484 * #1485 * #1486 * #1487 * #1488 * #1489 * #1491 * #1492 * #1493 * #1494 * #1496 * #1497 * #1498 * #1499 * #1500 * #1501 * #1502 * #1503 * #1504 * #1505 * #1506 * #1507 * #1508 * #1510 * #1511 * #1512 * #1513 * #1514 * #1515 * #1516 * #1517 * #1518 * #1519 * #1520 * #1522 * #1523 * #1524 * #1525 * #1526 * #1527 * #1528 * #1529 * #1530 * #1531 * #1532 * #1533 * #1534 * #1535 * #1536 * #1537 * #1540 * #1541 * #1543 * #1544 * #1545 * #1546 * #1547 * #1548 * #1549 * #1550 * #1552 * #1553 * #1554 * #1555 * #1556 * #1557 * #1558 * #1559 * #1560 * #1562 * #1563 * #1565 * #1566 * #1567 * #1568 * #1569 * #1570 * #1571 * #1572 * #1573 * #1574 * #1575 * #1576 * #1577 * #1578 * #1579 * #1580 * #1581 * #1583 * #1584 * #1585 * #1586 * #1587 * #1588 * #1589 * #1590 * #1591 * #1592 * #1593 * #1596 * #1597 * #1598 * #1600 * #1602 * #1605 * #1606 * #1607 * #1608 * #1610 * #1611 * #1612 * #1613 * #1614 * #1619 * #1620 * #1621
Problem
Patterns part of the migration of the CLI from D-Bus API to HTTP API:
Solution
SoftwareHTTPClient
SoftwareClient
because it serves as the backend for the aboveTesting
/testing_using_container.sh
Screenshots
No