Commit Graph

909 Commits

Author SHA1 Message Date
Diana Parra Corbacho 5f0981c5a3
Allow to use Khepri database to store metadata instead of Mnesia
[Why]

Mnesia is a very powerful and convenient tool for Erlang applications:
it is a persistent disc-based database, it handles replication accross
multiple Erlang nodes and it is available out-of-the-box from the
Erlang/OTP distribution. RabbitMQ relies on Mnesia to manage all its
metadata:

* virtual hosts' properties
* intenal users
* queue, exchange and binding declarations (not queues data)
* runtime parameters and policies
* ...

Unfortunately Mnesia makes it difficult to handle network partition and,
as a consequence, the merge conflicts between Erlang nodes once the
network partition is resolved. RabbitMQ provides several partition
handling strategies but they are not bullet-proof. Users still hit
situations where it is a pain to repair a cluster following a network
partition.

[How]

@kjnilsson created Ra [1], a Raft consensus library that RabbitMQ
already uses successfully to implement quorum queues and streams for
instance. Those queues do not suffer from network partitions.

We created Khepri [2], a new persistent and replicated database engine
based on Ra and we want to use it in place of Mnesia in RabbitMQ to
solve the problems with network partitions.

This patch integrates Khepri as an experimental feature. When enabled,
RabbitMQ will store all its metadata in Khepri instead of Mnesia.

This change comes with behavior changes. While Khepri remains disabled,
you should see no changes to the behavior of RabbitMQ. If there are
changes, it is a bug. After Khepri is enabled, there are significant
changes of behavior that you should be aware of.

Because it is based on the Raft consensus algorithm, when there is a
network partition, only the cluster members that are in the partition
with at least `(Number of nodes in the cluster ÷ 2) + 1` number of nodes
can "make progress". In other words, only those nodes may write to the
Khepri database and read from the database and expect a consistent
result.

For instance in a cluster of 5 RabbitMQ nodes:
* If there are two partitions, one with 3 nodes, one with 2 nodes, only
  the group of 3 nodes will be able to write to the database.
* If there are three partitions, two with 2 nodes, one with 1 node, none
  of the group can write to the database.

Because the Khepri database will be used for all kind of metadata, it
means that RabbitMQ nodes that can't write to the database will be
unable to perform some operations. A list of operations and what to
expect is documented in the associated pull request and the RabbitMQ
website.

This requirement from Raft also affects the startup of RabbitMQ nodes in
a cluster. Indeed, at least a quorum number of nodes must be started at
once to allow nodes to become ready.

To enable Khepri, you need to enable the `khepri_db` feature flag:

    rabbitmqctl enable_feature_flag khepri_db

When the `khepri_db` feature flag is enabled, the migration code
performs the following two tasks:
1. It synchronizes the Khepri cluster membership from the Mnesia
   cluster. It uses `mnesia_to_khepri:sync_cluster_membership/1` from
   the `khepri_mnesia_migration` application [3].
2. It copies data from relevant Mnesia tables to Khepri, doing some
   conversion if necessary on the way. Again, it uses
   `mnesia_to_khepri:copy_tables/4` from `khepri_mnesia_migration` to do
   it.

This can be performed on a running standalone RabbitMQ node or cluster.
Data will be migrated from Mnesia to Khepri without any service
interruption. Note that during the migration, the performance may
decrease and the memory footprint may go up.

Because this feature flag is considered experimental, it is not enabled
by default even on a brand new RabbitMQ deployment.

More about the implementation details below:

In the past months, all accesses to Mnesia were isolated in a collection
of `rabbit_db*` modules. This is where the integration of Khepri mostly
takes place: we use a function called `rabbit_khepri:handle_fallback/1`
which selects the database and perform the query or the transaction.
Here is an example from `rabbit_db_vhost`:

* Up until RabbitMQ 3.12.x:

        get(VHostName) when is_binary(VHostName) ->
            get_in_mnesia(VHostName).

* Starting with RabbitMQ 3.13.0:

        get(VHostName) when is_binary(VHostName) ->
            rabbit_khepri:handle_fallback(
              #{mnesia => fun() -> get_in_mnesia(VHostName) end,
                khepri => fun() -> get_in_khepri(VHostName) end}).

This `rabbit_khepri:handle_fallback/1` function relies on two things:
1. the fact that the `khepri_db` feature flag is enabled, in which case
   it always executes the Khepri-based variant.
4. the ability or not to read and write to Mnesia tables otherwise.

Before the feature flag is enabled, or during the migration, the
function will try to execute the Mnesia-based variant. If it succeeds,
then it returns the result. If it fails because one or more Mnesia
tables can't be used, it restarts from scratch: it means the feature
flag is being enabled and depending on the outcome, either the
Mnesia-based variant will succeed (the feature flag couldn't be enabled)
or the feature flag will be marked as enabled and it will call the
Khepri-based variant. The meat of this function really lives in the
`khepri_mnesia_migration` application [3] and
`rabbit_khepri:handle_fallback/1` is a wrapper on top of it that knows
about the feature flag.

However, some calls to the database do not depend on the existence of
Mnesia tables, such as functions where we need to learn about the
members of a cluster. For those, we can't rely on exceptions from
Mnesia. Therefore, we just look at the state of the feature flag to
determine which database to use. There are two situations though:

* Sometimes, we need the feature flag state query to block because the
  function interested in it can't return a valid answer during the
  migration. Here is an example:

        case rabbit_khepri:is_enabled(RemoteNode) of
            true  -> can_join_using_khepri(RemoteNode);
            false -> can_join_using_mnesia(RemoteNode)
        end

* Sometimes, we need the feature flag state query to NOT block (for
  instance because it would cause a deadlock). Here is an example:

        case rabbit_khepri:get_feature_state() of
            enabled -> members_using_khepri();
            _       -> members_using_mnesia()
        end

Direct accesses to Mnesia still exists. They are limited to code that is
specific to Mnesia such as classic queue mirroring or network partitions
handling strategies.

Now, to discover the Mnesia tables to migrate and how to migrate them,
we use an Erlang module attribute called
`rabbit_mnesia_tables_to_khepri_db` which indicates a list of Mnesia
tables and an associated converter module. Here is an example in the
`rabbitmq_recent_history_exchange` plugin:

    -rabbit_mnesia_tables_to_khepri_db(
       [{?RH_TABLE, rabbit_db_rh_exchange_m2k_converter}]).

The converter module  — `rabbit_db_rh_exchange_m2k_converter` in this
example  — is is fact a "sub" converter module called but
`rabbit_db_m2k_converter`. See the documentation of a `mnesia_to_khepri`
converter module to learn more about these modules.

[1] https://github.com/rabbitmq/ra
[2] https://github.com/rabbitmq/khepri
[3] https://github.com/rabbitmq/khepri_mnesia_migration

See #7206.

Co-authored-by: Jean-Sébastien Pédron <jean-sebastien@rabbitmq.com>
Co-authored-by: Diana Parra Corbacho <dparracorbac@vmware.com>
Co-authored-by: Michael Davis <mcarsondavis@gmail.com>
2023-09-29 16:00:11 +02:00
Diana Parra Corbacho 78f901a224 HTTP API: DELETE /api/queues/{vhost}/{name} use internal API call
A direct client operation fails if the queue is exclusive. This
API should behave like the rabbitmqctl that can delete the queue
even in that case
2023-09-27 08:18:59 +02:00
Simon Unge 2d74d24b80 Disable add/delete/shrink/grow QQ operations via HTTP api 2023-08-23 01:03:28 +00:00
Michael Klishin 99968792fa Basic tests for the endpoints introduced in #8532 2023-06-14 03:14:36 +04:00
Loïc Hoguin 1595727a1a
Fix parsing of cookie header in test suite 2023-04-04 10:11:31 +02:00
Michael Klishin bfcbef64b4 HTTP API: rename default queue type key
from defaultqueuetype to default_queue_type.
defaultqueuetype is still used as a fallback for backwards
compatibility.

Closes #7734.
2023-03-25 01:33:22 +04:00
Marcial Rosales 42b821f0e9 Add missing pem file 2023-02-28 14:10:00 +01:00
Marcial Rosales efb1b5bd10 Fix 2549
Allow list of preferred_username_claims in cuttlefish
config style.
Use new config style on two selenium test suites
Test oauth2 backend's config schema and oauth2 management
config schema
2023-02-28 10:38:28 +01:00
David Ansari 575f4e78bc Remove compatibility for feature flag stream_queue
Remove compatibility code for feature flag `stream_queue`
because this feature flag is required in 3.12.

See #7219
2023-02-13 15:31:40 +00:00
Michael Klishin 6c6f9c49ae
Naming, references #7165 2023-02-06 22:25:09 -05:00
Alex Valiushko db99c252a0 Add setting to disable op policy edit via API 2023-02-06 14:36:10 -08:00
Simon Unge 7fecfcd26c See #5957. HTTP api to generate hashed password from cleartext password 2023-01-23 13:00:49 -08:00
Marcial Rosales 9354397cbf
Support Idp initiated logon in mgt ui with Oauth
Configure preferred username from a token
Make client_secret optional
2023-01-03 07:09:00 -05:00
Michael Klishin ec4f1dba7d
(c) year bump: 2022 => 2023 2023-01-01 23:17:36 -05:00
Michael Klishin 4ddcab2b76
Use ?assertEqual here
References #6599
2022-12-12 19:52:51 +04:00
Michael Klishin 7c9e328a5c
Merge pull request #6599 from rabbitmq/default-queue-type-single-vhost-import
Fix default queue type handling for single vhost imports
2022-12-12 19:46:13 +04:00
Alexey Lebedeff 4bfe352168 Fix default queue type handling for single vhost imports
Default queue type logic didn't apply when import was done for a
single vhost. Exported definitions for a single vhost don't contain
`vhost` key, and anyway it's better to use the actual vhost name that
will be used for queue declaration.

And just in case, `vhost` is now stripped from all exported items for
a single vhost (it was still present in `parameters` and `policies`) -
on import it was ignored, but it could have been a source of the bug
similar to the one with the default queue type.
2022-12-12 14:20:22 +01:00
Simon Unge 32097035dc See #6016. Add HTTP to fetch app environment config 2022-12-11 20:38:53 -08:00
Michael Klishin 6fe28e724a
Squash a couple of warnings 2022-11-03 16:40:52 +04:00
Luke Bakken 7fe159edef
Yolo-replace format strings
Replaces `~s` and `~p` with their unicode-friendly counterparts.

```
git ls-files *.erl | xargs sed -i.ORIG -e s/~s>/~ts/g -e s/~p>/~tp/g
```
2022-10-10 10:32:03 +04:00
Karl Nilsson 2ad9f1320a Introduce new feature flag to avoid crashing channel.
When a delivery or credit_reply is sent from a node running 3.11.0 or 3.10.8
to an older node.
2022-10-07 09:21:35 +01:00
Michael Klishin dca7132dc3 management.oauth_enable => management.oauth_enabled 2022-09-02 00:16:13 +04:00
Marcial Rosales c8f6d9ee86 Enable oauth2 plugin
However this change will not take any effect
unless we add the aouth2 plugin as a dependency
in the Makefile
2022-08-30 17:11:20 +01:00
Marcial Rosales 1fa83260ba Ensure first oauth2 plugin is configured 2022-08-30 17:11:19 +01:00
Marcial Rosales fe34d27413 Fix test case oauth_test 2022-08-30 17:11:19 +01:00
Marcial Rosales 78d1be295a Fix auth_test
It was skipping the www-authenticate response header
regardless of the auth method when it should really skip it
when using oauth2
2022-08-30 17:11:19 +01:00
Marcial Rosales 10ccf33d4f WIP login/logout/token-refresh against keycloak 2022-08-30 17:11:16 +01:00
Marcial Rosales d69781a7ef
Support rich authorization request spec 2022-08-22 16:16:11 +04:00
Jean-Sébastien Pédron 6e9ee4d0da
Remove test code which depended on the `quorum_queue` feature flags
These checks are now irrelevant as the feature flag is required.
2022-08-01 12:41:30 +02:00
Jean-Sébastien Pédron 776b4323bd
Remove test code which depended on the `virtual_host_metadata` feature flags
These checks are now irrelevant as the feature flag is required.
2022-08-01 11:56:53 +02:00
Michael Klishin 3fe97685d6
Merge branch 'master' into mk-swap-json-library 2022-07-30 15:35:25 +04:00
Michael Klishin cba60c04c8
rabbitmqadmin_SUITE: encode value as bytes on Python 3 2022-07-30 02:43:04 +04:00
Michael Klishin ba18abd6e2
rabbitmqadmin_SUITE: only use Python 3, Python 2 is really truly EOL 2022-07-29 21:47:59 +04:00
Jean-Sébastien Pédron 32049cd256
Remove test code which depended on the `user_limits` feature flags
These checks are now irrelevant as the feature flag is required.
2022-07-29 11:04:48 +02:00
Michael Klishin d216d4293e
Remove a few tests that are no longer relevant
Back in 2016, JSON encoding and
much of the Erlang ecosystem used
proplists, which can lead to duplicate
keys in JSON documents.

In 2022 some JSON libraries only
decode JSON to maps, and maps
have unique keys, so these tests
are not worth adjusting or reproducing
with maps.

Per discussion with the team.
2022-07-29 10:34:52 +04:00
Michael Klishin 6feae50b0c
Schema: support for X-Frame-Options
as `management.headers.frame_options`
2022-07-25 13:54:54 +04:00
Michael Klishin 970d8acc3a
Correct header values used in tests 2022-07-25 13:54:54 +04:00
Michael Klishin fd22f105a8
Schema: support X-Xss-Protection
as management.headers.xss_protection
2022-07-25 13:54:54 +04:00
Michael Klishin 02e1f65d97
Schema: support for X-Content-Type-Options
as `management.headers.content_type_options`
2022-07-25 13:54:53 +04:00
Arnaud Cogoluègnes febefbd591
Skip test in mixed-version cluster mode
Otherwise needs to enable stream feature flag.

References #4622
2022-05-04 15:58:18 +02:00
Arnaud Cogoluègnes f3dfb507b7
Add consumer count to stream queue metrics
This commit adds the "consumers" metrics to stream queues (consumer count).
It is computed by counting the element of the consumer_created ETS table
for the given stream queue and for each member of the Osiris cluster.

Fixes #4622
2022-05-04 14:43:42 +02:00
Michael Klishin 7c47d0925a
Revert "Correct a double quote introduced in #4603"
This reverts commit 6a44e0e2ef.

That wiped a lot of files unintentionally
2022-04-20 16:05:56 +04:00
Michael Klishin 6a44e0e2ef
Correct a double quote introduced in #4603 2022-04-20 16:01:29 +04:00
Loïc Hoguin 499e0b9197
Remove the CQv1 disabled stats from management/Prometheus 2022-04-05 12:37:54 +02:00
Michael Klishin c38a3d697d
Bump (c) year 2022-03-21 01:21:56 +04:00
Philip Kuryloski c94a46994a Allow clearing of user tags while also setting a user password 2022-02-09 15:41:08 +01:00
Michael Klishin 11760f95bd
Don't run #3319 assertions in mixed version clusters 2021-08-19 23:03:09 +03:00
Michael Klishin f5fe419892
Make PUT /api/vhosts/{name} update tags and/or description 2021-08-18 19:07:25 +03:00
Iliia Khaprov 53d67fda1f
Merge pull request #3205 from rabbitmq/send-www-authenticate-when-basic-auth-present
Send www-authenticate header when basic auth present but it's wrong
2021-07-21 11:19:22 +02:00
Philip Kuryloski 5bc25fb2ff Fix accidental test case skip when not using mixed versions 2021-07-21 08:35:00 +02:00
Ilya Khaprov 39693cfb07
Send www-authenticate header when basic auth present but it's wrong
close #3181
2021-07-20 21:44:36 +02:00
Philip Kuryloski d6399bbb5b
Mixed version testing in bazel (#3200)
Unlike with gnu make, mixed version testing with bazel uses a package-generic-unix for the secondary umbrella rather than the source. This brings the benefit of being able to mixed version test releases built with older erlang versions (even though all nodes will run under the single version given to bazel)

This introduces new test labels, adding a `-mixed` suffix for every existing test. They can be skipped if necessary with `--test_tag_filters` (see the github actions workflow for an example)

As part of the change, it is now possible to run an old release of rabbit with rabbitmq_run rule, such as:

`bazel run @rabbitmq-server-generic-unix-3.8.17//:rabbitmq-run run-broker`
2021-07-19 14:33:25 +02:00
Philip Kuryloski 2fc112e29c Correct some test cleanup in rabbit_mgmt_http_SUITE 2021-07-07 18:05:55 +02:00
Michael Klishin 2826225cde
Drive-by change: speed up two tests in rabbit_mgmt_rabbitmqadmin_SUITE
This makes sure rabbitmqadmin suite doesn't spend minutes resolving
a non-existent hostname in environments with certain DNS client
settings.
2021-06-13 12:32:03 +08:00
Michael Klishin 300196ea4e
Second attempt at upgrading JSX to 3.1 2021-06-12 08:03:18 +08:00
dcorbacho 930c78795c Rename consumer_utilisation to consumer_capacity
Capacity is 100% when there are online consumers and no messages
2021-02-24 16:20:52 +01:00
Michael Klishin 52479099ec
Bump (c) year 2021-01-22 09:00:14 +03:00
Michael Klishin 10ced3cbd4
Adapt HTTP API test suite expectations 2020-12-10 15:27:17 +03:00
Luke Bakken 55c3f3670f wait_for_confirms timeout is in seconds
References rabbitmq/rabbitmq-erlang-client#138

cc @dumbbell
2020-11-02 11:20:15 -08:00
Jean-Sébastien Pédron ac303a2c74 rabbit_mgmt_http_health_checks_SUITE: Remove trailing whitespaces 2020-10-22 15:00:04 +02:00
Jean-Sébastien Pédron 6864929fe8 rabbit_mgmt_http_health_checks_SUITE: Don't import unused functions 2020-10-22 14:59:41 +02:00
Jean-Sébastien Pédron d39b691216 rabbit_mgmt_http_health_checks_SUITE: Pay attention to rabbit_ct_broker_helpers:enable_feature_flag() return value
If it returns `{skip, _}`, we must skip the test group.
2020-10-22 14:58:47 +02:00
Michael Klishin 22f447157f Include top-level port property for TLS listeners
This value is used at listener registration and will show up in
`rabbitmq-diagnostics listeners' output.

Closes #857
2020-10-19 13:48:21 +03:00
Michael Klishin c2350b1f59 Update tests to not use foobar x-arguments
Queues now validate x-arguments in addition to policy definitions.
2020-10-19 12:58:38 +03:00
Michael Klishin 07ec5b6fc3 Merge pull request #856 from rabbitmq/rabbitmq-management-855
Take error scenarios into account in aliveness test
2020-10-16 05:43:17 +03:00
Michael Klishin b6f775fa24 /api/auth-attempts/ => /api/auth/attempts 2020-10-14 08:03:17 +03:00
dcorbacho db637b6d56 Split get auth attempts API into global counters and detailed by source 2020-10-14 05:18:49 +03:00
dcorbacho 86bc48fc81 Query and rest auth attempt metrics 2020-10-14 05:18:48 +03:00
Luke Bakken a2b0df6524 Use -include directive when appropriate 2020-10-13 12:00:33 -07:00
Michael Klishin f3b4caa996 Finish cluster-wide and local alarm health check tests 2020-10-07 22:14:49 +03:00
dcorbacho 9d04d95250 Test health checks 2020-10-07 15:27:00 +01:00
Michael Klishin c2e7d0e04b HTTP API health check test suite WIP 2020-10-07 12:40:08 +03:00
dcorbacho ad805eb091 Introduce health checks
GET /api/health/checks/certificate-expiration
GET /api/health/checks/port-listener
GET /api/health/checks/protocol-listener
GET /api/health/checks/virtual-hosts
GET /api/health/checks/node-is-mirror-sync-critical
GET /api/health/checks/node-is-quorum-critical
2020-10-06 12:11:23 +01:00
kjnilsson a8947ac6f0 Uncomment some tests 2020-09-30 14:29:01 +01:00
dcorbacho 0686190f15 Stream queue
[#171206871]
2020-09-30 14:29:01 +01:00
Michael Klishin 641bc625b2 More test massaging 2020-09-24 14:18:18 +03:00
Michael Klishin ca84821a4c Regular HTTP API suite: bring back samples test
Per discussion with @dcorbacho
2020-09-24 13:59:52 +03:00
Michael Klishin 502c74579e Test suite massaging to reduce flakiness of some tests
Some tests are timing-sensitive in nature. Given enough cores,
the assumptions in some of them are no longer true.

In addition, some sample test assertions only make sense when
stats collection is disabled; removed them from the "regular" HTTP
API suite per discussion with @dcorbacho.

While at it, remove some overly opinionated assertions
and a test for the deprecated One True Health Check™.
2020-09-24 12:59:43 +03:00
Michael Klishin 46f94711cb Respond with a Bad Request when client provides double-encoded JSON
instead of a 500.

Closes #839.
2020-09-23 15:23:26 -07:00
Michael Klishin ba26c7721f Extract user limits FF tests into its own group
So that they are easy to skip in mixed-version clusters where
this feature flag can't be guaranteed to be available.

References #rabbitmq/rabbitmq-server#2380.
2020-09-03 06:05:15 +03:00
Michael Klishin 3bceaad700 Use await_condition in this timing-sensitive test 2020-09-02 17:44:23 +03:00
Michael Klishin b7de77e21d Wording 2020-08-31 09:05:32 +03:00
Michael Klishin a647cc4826 Naming and cosmetics 2020-08-31 09:05:32 +03:00
Michael Klishin 639fb6823e Avoid using deprecated http_uri:encode/1
It will be removed in Erlang 25.
2020-08-31 09:05:32 +03:00
Ayanda-D 6018abed6a Per user-limits tests 2020-08-31 09:02:46 +03:00
dcorbacho 449414a7e9 Switch to Mozilla Public License 2.0 (MPL 2.0) 2020-07-13 16:45:00 +01:00
Jean-Sébastien Pédron 6e563037a0 Change copyright holder from Pivotal to VMware 2020-06-17 14:06:10 +02:00
Michael Klishin c52f34e989 Make it possible to configure db cache multiplier via rabbitmq.conf
Closes rabbitmq/rabbitmq-management#821.
2020-06-10 11:30:43 +03:00
Philip Kuryloski 968c644401 Dedupe calls to rabbit_mgmt_test_util:reset_management_setting/1
It was called as a setup step in init_per_group, but also in every init_per_testcase.
2020-05-11 16:56:57 +02:00
Jean-Sébastien Pédron da1f4f6795 rabbit_mgmt_rabbitmqadmin_SUITE: Reset $HOME in end_per_testcase
It polluted the common_test node and caused inter-node communication
failures: a new `.erlang.cookie` file was re-generated in the overriden
$HOME directory, and this new cookie was used by RabbitMQ nodes started
after this testsuite.
2020-05-05 17:39:43 +02:00
Michael Klishin ce6fbba80d rabbitmqadmin: make --cli-switches take precedence over config file values
With most CLI tools, command line arguments
take precedence over values in the configuration file.

This was not the case in rabbitmqadmin, and very likely
unintentionally so, at least I could not find
any evidence of the contrary.

There was a test case that implicitly depended
on this behavior. Again, no indication of this
being an intentional design choice.

While this can be a breaking change, most
users either use CLI flags or the config file;
this is why this behavior has gone unnoticed
for at least 8 years. We therefore treat
this change as low risk and worth
shipping e.g. in a patch release.
rabbitmqadmin is installed manually and
therefore won't be replaced during a node
upgrade anyway. Operators would
have to opt-in.

Closes #804.
2020-04-18 21:29:33 +03:00
Michael Klishin 67f80ce900 One more test 2020-04-15 19:35:13 +03:00
Michael Klishin 8fe756d9f6 Remove a function that's no longer used 2020-04-15 18:39:44 +03:00
Michael Klishin 584b06069c Simplify and adapt listener_config_SUITE
Part of #800
2020-04-15 18:30:35 +03:00
Michael Klishin d4f7f85fef Squash a compilation warning
(cherry picked from commit 1ec6f64658)
2020-04-15 15:29:15 +03:00
Michael Klishin 3de47a2f2b Use rabbit_ct_helpers:await_condition/2 to detect rate changes 2020-04-10 11:07:12 +03:00
Jean-Sébastien Pédron 004e0569ce Update copyright (year 2020) 2020-03-10 15:43:34 +01:00
Luke Bakken a4ae371aa6 Revert "Fixes a function_clause in httpc:request/5"
This reverts commit 234b1341a0.
2020-02-01 16:44:33 +00:00
Michael Klishin 234b1341a0 Fixes a function_clause in httpc:request/5
Since get_static is not a method/verb httpc supports.
2020-02-01 16:12:39 +03:00
Luke Bakken 4a31161482 Add test for CSP headers
Tests both API call and static file

Part of #767

Depends on rabbitmq/rabbitmq-ct-helpers#37
2020-01-31 22:30:06 +00:00
dcorbacho 723133f493 POST /login endpoint
Closes #764
2020-01-17 12:50:33 +01:00
Michael Klishin 2e4255c1e7 (c) bump 2019-12-29 05:50:30 +03:00
Michael Klishin f7bb072b4b Merge pull request #753 from rabbitmq/mgmt-less-improvements
Display queue replicas and totals in metrics-less UI
2019-11-27 08:31:20 +03:00
Michael Klishin 93f051ad77 A follow-up to f502aa7f34, rabbitmq/rabbitmq-server#2171 2019-11-27 08:00:03 +03:00
Michael Klishin f502aa7f34 Adapt another test for rabbitmq/rabbitmq-server#2171 2019-11-27 07:30:38 +03:00
Michael Klishin 965ac8440d Adapt a test for rabbitmq/rabbitmq-server#2171 2019-11-22 20:56:33 +03:00
dcorbacho aef931f750 Option to list queue totals when statistics are disabled
[#169802101]
2019-11-18 11:41:42 +00:00
dcorbacho 9576aaf43c Reintroduce replicas information 2019-11-15 12:04:27 +00:00
Michael Klishin 258e2b84f2 Definition import: refactor for future ctl command 2019-11-15 07:15:22 +03:00
Michael Klishin 045f9775f4 Move definition import machinery to core
Part of #749.
2019-11-12 03:30:48 +03:00
Luke Bakken fcd83bc287 Add test that fails for rabbitmq-management#739
fixup
2019-10-01 10:12:54 -07:00
Michael Klishin 33082f2d2d Two more management.ssl.* options
The options are not very useful for HTTPS clients but we should support
them for consistency and completeness.

Closes #735.
2019-09-16 19:36:32 +03:00
Diana Corbacho 046d89864e Handle vhost description and tags fields
[#166298298]
2019-08-30 11:53:43 +02:00
Gerhard Lazu c5b1d07ada Ensure that a request without auth header does not return a basic auth prompt
When basic auth is disabled, we don't want to display the basic auth
prompt just to return the same 401 that we would because basic auth is
disabled.

rabbitmq/rabbitmq-management#724

[#158496849]
2019-08-08 18:30:42 +01:00
Diana Corbacho ebabd54fae Validate flags to disable features on runtime
[#167754496]
2019-08-07 17:32:51 +01:00
Michael Klishin 7b47850015 Merge branch 'master' into disable-basic-http-auth 2019-08-02 19:58:33 +03:00
Michael Klishin f1ade9c9a6 Merge pull request #722 from rabbitmq/mgmt-oauth
Management UI can obtain an OAuth 2 token from UAA/CF SSO service
2019-08-02 19:19:18 +03:00
Diana Corbacho c9d054ea66 Disable basic auth for definitions
[#158496849]
2019-07-30 16:19:33 +01:00
Diana Corbacho 3260db87f5 Disable basic HTTP auth
Config parameter: {disable_basic_auth, <bool>}
Defaults to 'false'

[#158496849]
2019-07-30 16:19:20 +01:00
Michael Klishin ceea3f9589 Update tests 2019-07-27 15:23:12 +03:00
Michael Klishin 2e0b6146d0 Parse routing keys with values of `null` and `undefined` to their respective atoms
See #723 for background.

Currently there are three main ways to declare a binding:

 * Use an AMQP 0-9-1 client
 * Use an HTTP API client
 * Definition import

For the sake of this change we will fold the latter two options into
one as they are effectively identical as far as data formats go.

An HTTP API client can do things that an AMQP 0-9-1 would not be able
to because of framing/parser/generator restrictions, and vice versa.

With HTTP API and definition import the following importance

 * When a binding is added, routing key can be omitted or set to `null` 
(or `undefined`)
 * When a binding is deleted, a blank routing key can only be specified
   using a convention since an empty URI path arguments are not 
supported
   by Cowboy REST and would make no sense to the developer.

Omitted or `null` `routing_key` values are parsed to their respective 
atoms.
Those atoms are then stored in binding records. When a binding is 
retrieved
or deleted (the case in #723), the conventionally encoded routing key 
that
contained "null" for name was parsed to "null" (a string). This 
discrepancy
led to false 404 responses from the API.

Note that this solution is merely a band aid over a fundamental 
difference
in two APIs. Rejecting `null` or undefined values might be a better 
option
but we cannot adopt it in 3.7.x. It remains to be discussed whether that
would improve user experience.

Another problematic scenario is routing keys with the value of "null"
(a string) used at binding time. This change would break deletion for
those. We'll assume that no developer would intentionally use such
routing key as the confusion and risk are more or less obvious.
2019-07-27 10:22:51 +03:00
Diana Corbacho 9732fb54be Minor fixes
[#158496811]
2019-07-25 16:28:58 +01:00
Diana Corbacho 10a8c61c2b Test /auth endpoint
[#158496811]
2019-07-24 12:31:39 +01:00
Michael Klishin b02243523f Update exports and tests for 4960f0117d
References #711, #715.
2019-07-16 20:14:57 +03:00
Michael Klishin 83d48bd36d Merge branch 'master' into management-only-api 2019-07-08 18:41:37 +03:00
Michael Klishin 33a93d7a93 Merge pull request #711 from rabbitmq/definitions_import_timeout
Definitions import timeout
2019-06-18 15:59:54 +03:00
Michael Klishin 521da23dba Prefer assertMatch over pattern matching for better failure reporting 2019-06-18 15:29:57 +03:00
Michael Klishin ec1cdc9a86 Use fewer vhosts in this test 2019-06-18 00:45:47 +03:00
Daniil Fedotov a0d7382b80 Report definitions import progress to the client.
This does not address the idle_timeout issue, but may
prevent clients from timing out and closing connection
when importing definitions.
2019-06-17 16:31:47 -04:00
Daniil Fedotov dc54d87a75 Test long definitions import 2019-06-17 16:31:19 -04:00
Daniil Fedotov 6083eb0bef Propagate validation error when importing definitions from a directory.
When definitions import fails it returns {error, Reason}, which is ignored
when importing multiple definitions and fails silently.
Fix that by checking result of every import.
2019-06-17 11:19:58 -04:00
Diana Corbacho 83d4fd71b3 Test disabling the stats on the HTTP API using the query string
?disable_stats=true

[#166445368]
2019-06-11 13:24:25 +01:00
Diana Corbacho cadc15856e Management only UI and HTTP API
Slimmed down version of the API without metrics.
Stats can be disabled from app config or in the HTTP request.
rabbitmq_management.disable_management_stats = true

Disabling the collectors in the agent now allows the management
application to start, but strictly in management-only mode.

[#166445368]
2019-06-10 22:09:41 +01:00
Luke Bakken e9ed88277d Allow but ignore charset if set for HTTP request
Fixes #703
2019-05-14 12:46:41 -07:00
Michael Klishin 47650d2908 Merge sendfile default using maps 2019-04-29 22:22:56 +03:00
Daniil Fedotov 26e01b365b Disable sendfile in cowboy by default.
Kernel sendfile can behave weirdly sometimes:
https://groups.google.com/forum/#!msg/rabbitmq-users/jyqVkwP_a24/qwWectTcCgAJ
Sendfile functionality should not impact performance much and
may be disabled by default.
It still can be enabled via cowboy_options.

[#164633826]
2019-04-25 17:30:40 -04:00
Gerhard Lazu 84641f59c8 Add stats HTTP redirect test 2019-04-24 10:24:39 +01:00
Michael Klishin ac7ab8c9e8 Update a test to be forward compatible with rabbit:status/0 format changes
See rabbitmq/rabbitmq-cli#340.
2019-04-12 13:14:02 +04:00
Daniil Fedotov 8762881b0b Fix function clause in bindings when using CORS headers. Enable OPTIONS method for bulk delete.
Bug reported in https://groups.google.com/forum/#!topic/rabbitmq-users/AtGYGGhxODc
When using CORS headers, bindings endpoint was failing with function clause.
rabbit_mgmt_wm_bindings module is using non-standard handler state, which was
unmatched with undefined.
2019-04-04 10:46:26 -07:00
Spring Operator 5ffa1fd9a9 URL Cleanup
This commit updates URLs to prefer the https protocol. Redirects are not followed to avoid accidentally expanding intentionally shortened URLs (i.e. if using a URL shortener).

# HTTP URLs that Could Not Be Fixed
These URLs were unable to be fixed. Please review them to see if they can be manually resolved.

* http://blog.listincomprehension.com/search/label/procket (200) with 1 occurrences could not be migrated:
   ([https](https://blog.listincomprehension.com/search/label/procket) result ClosedChannelException).
* http://dozzie.jarowit.net/trac/wiki/TOML (200) with 1 occurrences could not be migrated:
   ([https](https://dozzie.jarowit.net/trac/wiki/TOML) result SSLHandshakeException).
* http://dozzie.jarowit.net/trac/wiki/subproc (200) with 1 occurrences could not be migrated:
   ([https](https://dozzie.jarowit.net/trac/wiki/subproc) result SSLHandshakeException).
* http://e2project.org (200) with 1 occurrences could not be migrated:
   ([https](https://e2project.org) result AnnotatedConnectException).
* http://erik.eae.net/archives/2007/07/27/18.54.15/ (200) with 1 occurrences could not be migrated:
   ([https](https://erik.eae.net/archives/2007/07/27/18.54.15/) result SSLHandshakeException).
* http://javascript.nwbox.com/IEContentLoaded/ (200) with 1 occurrences could not be migrated:
   ([https](https://javascript.nwbox.com/IEContentLoaded/) result SSLHandshakeException).
* http://nitrogenproject.com/ (200) with 2 occurrences could not be migrated:
   ([https](https://nitrogenproject.com/) result ConnectTimeoutException).
* http://proper.softlab.ntua.gr (200) with 1 occurrences could not be migrated:
   ([https](https://proper.softlab.ntua.gr) result SSLHandshakeException).
* http://sammyjs.org (200) with 2 occurrences could not be migrated:
   ([https](https://sammyjs.org) result SSLHandshakeException).
* http://sammyjs.org/docs/plugins (200) with 2 occurrences could not be migrated:
   ([https](https://sammyjs.org/docs/plugins) result SSLHandshakeException).
* http://sammyjs.org/docs/routes (200) with 2 occurrences could not be migrated:
   ([https](https://sammyjs.org/docs/routes) result SSLHandshakeException).
* http://webfx.eae.net/dhtml/boxsizing/boxsizing.html (200) with 1 occurrences could not be migrated:
   ([https](https://webfx.eae.net/dhtml/boxsizing/boxsizing.html) result SSLHandshakeException).
* http://yaws.hyber.org (200) with 1 occurrences could not be migrated:
   ([https](https://yaws.hyber.org) result AnnotatedConnectException).
* http://choven.ca (503) with 1 occurrences could not be migrated:
   ([https](https://choven.ca) result ConnectTimeoutException).

# Fixed URLs

## Fixed But Review Recommended
These URLs were fixed, but the https status was not OK. However, the https status was the same as the http request or http redirected to an https URL, so they were migrated. Your review is recommended.

* http://fixprotocol.org/ (301) with 1 occurrences migrated to:
  https://fixtrading.org ([https](https://fixprotocol.org/) result SSLHandshakeException).
* http://jsperf.com/getall-vs-sizzle/2 (301) with 1 occurrences migrated to:
  https://jsperf.com/getall-vs-sizzle/2 ([https](https://jsperf.com/getall-vs-sizzle/2) result ReadTimeoutException).
* http://erldb.org (UnknownHostException) with 1 occurrences migrated to:
  https://erldb.org ([https](https://erldb.org) result UnknownHostException).
* http://some-host-that-does-not-exist:15672/ (UnknownHostException) with 1 occurrences migrated to:
  https://some-host-that-does-not-exist:15672/ ([https](https://some-host-that-does-not-exist:15672/) result UnknownHostException).
* http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ (301) with 1 occurrences migrated to:
  https://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ ([https](https://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/) result 404).
* http://www.JSON.org/js.html (404) with 1 occurrences migrated to:
  https://www.JSON.org/js.html ([https](https://www.JSON.org/js.html) result 404).

## Fixed Success
These URLs were switched to an https URL with a 2xx status. While the status was successful, your review is still recommended.

* http://bugs.jquery.com/ticket/12359 with 1 occurrences migrated to:
  https://bugs.jquery.com/ticket/12359 ([https](https://bugs.jquery.com/ticket/12359) result 200).
* http://bugs.jquery.com/ticket/13378 with 1 occurrences migrated to:
  https://bugs.jquery.com/ticket/13378 ([https](https://bugs.jquery.com/ticket/13378) result 200).
* http://cloudi.org/ with 27 occurrences migrated to:
  https://cloudi.org/ ([https](https://cloudi.org/) result 200).
* http://code.quirkey.com/sammy/ with 1 occurrences migrated to:
  https://code.quirkey.com/sammy/ ([https](https://code.quirkey.com/sammy/) result 200).
* http://erlware.org/ with 1 occurrences migrated to:
  https://erlware.org/ ([https](https://erlware.org/) result 200).
* http://inaka.github.io/cowboy-trails/ with 1 occurrences migrated to:
  https://inaka.github.io/cowboy-trails/ ([https](https://inaka.github.io/cowboy-trails/) result 200).
* http://jquery.com/ with 3 occurrences migrated to:
  https://jquery.com/ ([https](https://jquery.com/) result 200).
* http://jsperf.com/thor-indexof-vs-for/5 with 1 occurrences migrated to:
  https://jsperf.com/thor-indexof-vs-for/5 ([https](https://jsperf.com/thor-indexof-vs-for/5) result 200).
* http://ninenines.eu with 6 occurrences migrated to:
  https://ninenines.eu ([https](https://ninenines.eu) result 200).
* http://ninenines.eu/ with 1 occurrences migrated to:
  https://ninenines.eu/ ([https](https://ninenines.eu/) result 200).
* http://sizzlejs.com/ with 2 occurrences migrated to:
  https://sizzlejs.com/ ([https](https://sizzlejs.com/) result 200).
* http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ with 1 occurrences migrated to:
  https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ ([https](https://web.archive.org/web/20100324014747/https://blindsignals.com/index.php/2009/07/jquery-delay/) result 200).
* http://www.actordb.com/ with 2 occurrences migrated to:
  https://www.actordb.com/ ([https](https://www.actordb.com/) result 200).
* http://www.cs.kent.ac.uk/projects/wrangler/Home.html with 1 occurrences migrated to:
  https://www.cs.kent.ac.uk/projects/wrangler/Home.html ([https](https://www.cs.kent.ac.uk/projects/wrangler/Home.html) result 200).
* http://www.enhanceie.com/ie/bugs.asp with 1 occurrences migrated to:
  https://www.enhanceie.com/ie/bugs.asp ([https](https://www.enhanceie.com/ie/bugs.asp) result 200).
* http://www.rabbitmq.com/amqp-0-9-1-reference.html with 1 occurrences migrated to:
  https://www.rabbitmq.com/amqp-0-9-1-reference.html ([https](https://www.rabbitmq.com/amqp-0-9-1-reference.html) result 200).
* http://www.rabbitmq.com/configure.html with 1 occurrences migrated to:
  https://www.rabbitmq.com/configure.html ([https](https://www.rabbitmq.com/configure.html) result 200).
* http://www.rabbitmq.com/confirms.html with 1 occurrences migrated to:
  https://www.rabbitmq.com/confirms.html ([https](https://www.rabbitmq.com/confirms.html) result 200).
* http://www.rabbitmq.com/consumers.html with 1 occurrences migrated to:
  https://www.rabbitmq.com/consumers.html ([https](https://www.rabbitmq.com/consumers.html) result 200).
* http://www.rabbitmq.com/github.html with 1 occurrences migrated to:
  https://www.rabbitmq.com/github.html ([https](https://www.rabbitmq.com/github.html) result 200).
* http://www.rabbitmq.com/ha.html with 3 occurrences migrated to:
  https://www.rabbitmq.com/ha.html ([https](https://www.rabbitmq.com/ha.html) result 200).
* http://www.rabbitmq.com/management-cli.html with 1 occurrences migrated to:
  https://www.rabbitmq.com/management-cli.html ([https](https://www.rabbitmq.com/management-cli.html) result 200).
* http://www.rabbitmq.com/management.html with 7 occurrences migrated to:
  https://www.rabbitmq.com/management.html ([https](https://www.rabbitmq.com/management.html) result 200).
* http://www.rabbitmq.com/memory-use.html with 3 occurrences migrated to:
  https://www.rabbitmq.com/memory-use.html ([https](https://www.rabbitmq.com/memory-use.html) result 200).
* http://www.rabbitmq.com/memory.html with 3 occurrences migrated to:
  https://www.rabbitmq.com/memory.html ([https](https://www.rabbitmq.com/memory.html) result 200).
* http://www.rabbitmq.com/nettick.html with 1 occurrences migrated to:
  https://www.rabbitmq.com/nettick.html ([https](https://www.rabbitmq.com/nettick.html) result 200).
* http://www.rabbitmq.com/partitions.html with 2 occurrences migrated to:
  https://www.rabbitmq.com/partitions.html ([https](https://www.rabbitmq.com/partitions.html) result 200).
* http://www.rabbitmq.com/persistence-conf.html with 2 occurrences migrated to:
  https://www.rabbitmq.com/persistence-conf.html ([https](https://www.rabbitmq.com/persistence-conf.html) result 200).
* http://www.rabbitmq.com/services.html with 1 occurrences migrated to:
  https://www.rabbitmq.com/services.html ([https](https://www.rabbitmq.com/services.html) result 200).
* http://www.rebar3.org with 1 occurrences migrated to:
  https://www.rebar3.org ([https](https://www.rebar3.org) result 200).
* http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html with 1 occurrences migrated to:
  https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html ([https](https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html) result 200).
* http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html with 1 occurrences migrated to:
  https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html ([https](https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html) result 200).
* http://www.w3.org/TR/2011/REC-css3-selectors-20110929/ with 2 occurrences migrated to:
  https://www.w3.org/TR/2011/REC-css3-selectors-20110929/ ([https](https://www.w3.org/TR/2011/REC-css3-selectors-20110929/) result 200).
* http://www.w3.org/TR/CSS21/syndata.html with 2 occurrences migrated to:
  https://www.w3.org/TR/CSS21/syndata.html ([https](https://www.w3.org/TR/CSS21/syndata.html) result 200).
* http://www.w3.org/TR/DOM-Level-3-Events/ with 1 occurrences migrated to:
  https://www.w3.org/TR/DOM-Level-3-Events/ ([https](https://www.w3.org/TR/DOM-Level-3-Events/) result 200).
* http://www.w3.org/TR/selectors/ with 4 occurrences migrated to:
  https://www.w3.org/TR/selectors/ ([https](https://www.w3.org/TR/selectors/) result 200).
* http://code.google.com/p/stringencoders/ with 1 occurrences migrated to:
  https://code.google.com/p/stringencoders/ ([https](https://code.google.com/p/stringencoders/) result 301).
* http://code.google.com/p/stringencoders/source/browse/ with 2 occurrences migrated to:
  https://code.google.com/p/stringencoders/source/browse/ ([https](https://code.google.com/p/stringencoders/source/browse/) result 301).
* http://contributor-covenant.org with 1 occurrences migrated to:
  https://contributor-covenant.org ([https](https://contributor-covenant.org) result 301).
* http://contributor-covenant.org/version/1/3/0/ with 1 occurrences migrated to:
  https://contributor-covenant.org/version/1/3/0/ ([https](https://contributor-covenant.org/version/1/3/0/) result 301).
* http://dev.w3.org/csswg/cssom/ with 1 occurrences migrated to:
  https://dev.w3.org/csswg/cssom/ ([https](https://dev.w3.org/csswg/cssom/) result 301).
* http://inaka.github.com/apns4erl with 1 occurrences migrated to:
  https://inaka.github.com/apns4erl ([https](https://inaka.github.com/apns4erl) result 301).
* http://inaka.github.com/edis/ with 1 occurrences migrated to:
  https://inaka.github.com/edis/ ([https](https://inaka.github.com/edis/) result 301).
* http://jquery.org/license with 2 occurrences migrated to:
  https://jquery.org/license ([https](https://jquery.org/license) result 301).
* http://lasp-lang.org/ with 1 occurrences migrated to:
  https://lasp-lang.org/ ([https](https://lasp-lang.org/) result 301).
* http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx with 1 occurrences migrated to:
  https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx ([https](https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx) result 301).
* http://msdn.microsoft.com/en-us/library/ie/ms536648 with 1 occurrences migrated to:
  https://msdn.microsoft.com/en-us/library/ie/ms536648 ([https](https://msdn.microsoft.com/en-us/library/ie/ms536648) result 301).
* http://rabbitmq.com with 5 occurrences migrated to:
  https://rabbitmq.com ([https](https://rabbitmq.com) result 301).
* http://rabbitmq.com/ae.html with 1 occurrences migrated to:
  https://rabbitmq.com/ae.html ([https](https://rabbitmq.com/ae.html) result 301).
* http://rabbitmq.com/consumers.html with 1 occurrences migrated to:
  https://rabbitmq.com/consumers.html ([https](https://rabbitmq.com/consumers.html) result 301).
* http://rabbitmq.com/dlx.html with 2 occurrences migrated to:
  https://rabbitmq.com/dlx.html ([https](https://rabbitmq.com/dlx.html) result 301).
* http://rabbitmq.com/maxlength.html with 2 occurrences migrated to:
  https://rabbitmq.com/maxlength.html ([https](https://rabbitmq.com/maxlength.html) result 301).
* http://rabbitmq.com/passwords.html with 1 occurrences migrated to:
  https://rabbitmq.com/passwords.html ([https](https://rabbitmq.com/passwords.html) result 301).
* http://rabbitmq.com/priority.html with 1 occurrences migrated to:
  https://rabbitmq.com/priority.html ([https](https://rabbitmq.com/priority.html) result 301).
* http://rabbitmq.com/ttl.html with 2 occurrences migrated to:
  https://rabbitmq.com/ttl.html ([https](https://rabbitmq.com/ttl.html) result 301).
* http://saleyn.github.com/erlexec with 1 occurrences migrated to:
  https://saleyn.github.com/erlexec ([https](https://saleyn.github.com/erlexec) result 301).
* http://support.microsoft.com/kb/186063 with 1 occurrences migrated to:
  https://support.microsoft.com/kb/186063 ([https](https://support.microsoft.com/kb/186063) result 301).
* http://technet.microsoft.com/en-us/sysinternals/bb896655 with 2 occurrences migrated to:
  https://technet.microsoft.com/en-us/sysinternals/bb896655 ([https](https://technet.microsoft.com/en-us/sysinternals/bb896655) result 301).
* http://www.erlang.org/doc/man/sasl_app.html with 1 occurrences migrated to:
  https://www.erlang.org/doc/man/sasl_app.html ([https](https://www.erlang.org/doc/man/sasl_app.html) result 301).
* http://www.mozilla.org/MPL/ with 86 occurrences migrated to:
  https://www.mozilla.org/MPL/ ([https](https://www.mozilla.org/MPL/) result 301).
* http://www.mozilla.org/mpl/ with 3 occurrences migrated to:
  https://www.mozilla.org/mpl/ ([https](https://www.mozilla.org/mpl/) result 301).
* http://www.rabbitmq.com/man/rabbitmq-plugins.1.man.html with 1 occurrences migrated to:
  https://www.rabbitmq.com/man/rabbitmq-plugins.1.man.html ([https](https://www.rabbitmq.com/man/rabbitmq-plugins.1.man.html) result 301).
* http://www.w3.org/TR/css3-selectors/ with 1 occurrences migrated to:
  https://www.w3.org/TR/css3-selectors/ ([https](https://www.w3.org/TR/css3-selectors/) result 301).
* http://www.whatwg.org/specs/web-apps/current-work/ with 1 occurrences migrated to:
  https://www.whatwg.org/specs/web-apps/current-work/ ([https](https://www.whatwg.org/specs/web-apps/current-work/) result 301).
* http://zhongwencool.github.io/observer_cli with 1 occurrences migrated to:
  https://zhongwencool.github.io/observer_cli ([https](https://zhongwencool.github.io/observer_cli) result 301).
* http://developer.mozilla.org/en/docs/Canvas_tutorial:Drawing_shapes with 1 occurrences migrated to:
  https://developer.mozilla.org/en/docs/Canvas_tutorial:Drawing_shapes ([https](https://developer.mozilla.org/en/docs/Canvas_tutorial:Drawing_shapes) result 302).
* http://javascript.crockford.com/jsmin.html with 1 occurrences migrated to:
  https://javascript.crockford.com/jsmin.html ([https](https://javascript.crockford.com/jsmin.html) result 302).
* http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx with 2 occurrences migrated to:
  https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx ([https](https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx) result 302).
* http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context with 1 occurrences migrated to:
  https://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context ([https](https://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context) result 302).

# Ignored
These URLs were intentionally ignored.

* http://localhost with 2 occurrences
* http://localhost/ with 2 occurrences
* http://localhost:15672/ with 1 occurrences
* http://localhost:15672/api/channels?sort=message_stats.publish_details.rate&amp;sort_reverse=true&amp;columns=name,message_stats.publish_details.rate,message_stats.deliver_get_details.rate with 2 occurrences
* http://localhost:15672/api/exchanges/%2F/my-new-exchange with 4 occurrences
* http://localhost:15672/api/vhosts with 2 occurrences
* http://localhost:15672/api/vhosts/foo with 2 occurrences
2019-03-20 03:17:48 -05:00
Michael Klishin c57092db42 Add some tests for #665 2019-03-12 04:30:39 +03:00
Josh Soref b1b5213896 spelling: integer 2019-02-12 23:51:50 -05:00
Michael Klishin 4aaf086ebe Consume request body in full
Closes #657.
2019-02-11 02:49:04 +03:00
Jean-Sébastien Pédron a3cc3755a4 rabbit_mgmt_http_SUITE: Skip quorum queue tests if quorum queues are unsupported 2019-02-01 17:55:06 +01:00
Arnaud Cogoluègnes 7f41cc17fd Add consumer activity status column
[#163298456]

References rabbitmq/rabbitmq-server#1838
2019-01-24 10:53:30 +01:00
Arnaud Cogoluègnes 7b14a5b77d Add help and link to explain active consumer flag
[#163298456]

References rabbitmq/rabbitmq-server#1838
2019-01-18 15:49:54 +01:00
kjnilsson 1d24f05f60 fix consumer_created test setup 2019-01-17 16:26:10 +00:00
Arnaud Cogoluègnes 7f977fce14 Add column for single active consumer in consumers view
[#163089472]

References #649
2019-01-15 15:18:55 +01:00
Luke Bakken cadf37bff5 Modify test so generated ciphers are in the expected order 2018-12-31 12:04:48 -08:00
Michael Klishin 611341a50c Support cipher suites and more TLS listener options 2018-12-27 03:04:59 +03:00