| defmodule Couch.Test.Setup.Step.Start do |
| @moduledoc """ |
| Step to start a set of couchdb applications. By default it starts |
| list of applications from DEFAULT_APPS macro defined in `test_util.erl`. |
| At the time of writing this list included: |
| - inets |
| - ibrowse |
| - ssl |
| - config |
| - couch_epi |
| - couch_event |
| - couch |
| |
| It is possible to specify additional list of applications to start. |
| |
| This setup is also maintains `clustered_url` and `backdoor_url` for future use. |
| The value for `clustered_url` could be nil if :chttpd app is not included in extra_apps. |
| |
| Example |
| setup |
| |> Setup.Step.Start.new(:start, extra_apps: [:fabric, :chttpd]) |
| ... |
| |> Setup.run |
| ... |
| |
| started_apps = Setup.Step.Start.apps |
| clustered_url = setup |> Setup.get(:start) |> Setup.Step.Start.clustered_url |
| backdoor_url = setup |> Setup.get(:start) |> Setup.Step.Start.backdoor_url |
| """ |
| alias Couch.Test.Setup |
| alias Couch.Test.Setup.Step |
| |
| defstruct [:test_ctx, :extra_apps, :clustered_url, :backdoor_url] |
| |
| def new(setup, id, extra_apps: extra_apps) do |
| setup |> Setup.step(id, %__MODULE__{extra_apps: extra_apps || []}) |
| end |
| |
| def setup(setup, %__MODULE__{extra_apps: extra_apps} = step) do |
| test_config = setup |> Setup.get(:test_config) |> Step.Config.get() |
| protocol = test_config[:backdoor][:protocol] || "http" |
| test_ctx = :test_util.start_couch(extra_apps) |
| addr = :config.get('couch_httpd', 'bind_address', '127.0.0.1') |
| port = :mochiweb_socket_server.get(:couch_httpd, :port) |
| backdoor_url = "#{protocol}://#{addr}:#{port}" |
| clustered_url = |
| if :chttpd in extra_apps do |
| protocol = test_config[:clustered][:protocol] || "http" |
| addr = :config.get('chttpd', 'bind_address', '127.0.0.1') |
| port = :mochiweb_socket_server.get(:chttpd, :port) |
| "#{protocol}://#{addr}:#{port}" |
| else |
| nil |
| end |
| %{step | |
| test_ctx: test_ctx, |
| clustered_url: clustered_url, |
| backdoor_url: backdoor_url |
| } |
| end |
| |
| def teardown(_setup, %___MODULE__{test_ctx: test_ctx}) do |
| :test_util.stop_couch(test_ctx) |
| end |
| |
| def backdoor_url(%__MODULE__{backdoor_url: url}) do |
| url |
| end |
| |
| def clustered_url(%__MODULE__{clustered_url: url}) do |
| url |
| end |
| |
| def extra_apps(%__MODULE__{extra_apps: apps}) do |
| apps |
| end |
| |
| @doc """ |
| Returns list of currently running applications |
| """ |
| def apps() do |
| for {x, _, _} <- Application.started_applications, do: x |
| end |
| |
| end |