Struct holochain::sweettest::SweetConductor
source · [−]pub struct SweetConductor { /* private fields */ }
Expand description
A useful Conductor abstraction for testing, allowing startup and shutdown as well as easy installation of apps across multiple Conductors and Agents.
This is intentionally NOT Clone
, because the drop handle triggers a shutdown of
the conductor handle, which would render all other cloned instances useless.
If you need multiple references to a SweetConductor, put it in an Arc
Implementations
sourceimpl SweetConductor
impl SweetConductor
sourcepub async fn new(
handle: ConductorHandle,
envs: TestEnvs,
config: ConductorConfig
) -> SweetConductor
pub async fn new(
handle: ConductorHandle,
envs: TestEnvs,
config: ConductorConfig
) -> SweetConductor
Create a SweetConductor from an already-built ConductorHandle and environments DnaStore The conductor will be supplied with a single test AppInterface named “sweet-interface” so that signals may be emitted
sourcepub async fn from_config(config: ConductorConfig) -> SweetConductor
pub async fn from_config(config: ConductorConfig) -> SweetConductor
Create a SweetConductor with a new set of TestEnvs from the given config
sourcepub async fn from_builder<DS: DnaStore + 'static>(
builder: ConductorBuilder<DS>
) -> SweetConductor
pub async fn from_builder<DS: DnaStore + 'static>(
builder: ConductorBuilder<DS>
) -> SweetConductor
Create a SweetConductor from a partially-configured ConductorBuilder
sourcepub async fn handle_from_existing(
envs: &TestEnvs,
config: &ConductorConfig,
extra_dnas: &[DnaFile]
) -> ConductorHandle
pub async fn handle_from_existing(
envs: &TestEnvs,
config: &ConductorConfig,
extra_dnas: &[DnaFile]
) -> ConductorHandle
Create a handle from an existing environment and config
sourcepub async fn from_standard_config() -> SweetConductor
pub async fn from_standard_config() -> SweetConductor
Create a SweetConductor with a new set of TestEnvs from the given config
sourcepub fn keystore(&self) -> MetaLairClient
pub fn keystore(&self) -> MetaLairClient
Access the MetaLairClient for this conductor
sourcepub async fn enable_app(
&self,
id: InstalledAppId
) -> ConductorResult<(InstalledApp, Vec<(CellId, CellError)>)>
pub async fn enable_app(
&self,
id: InstalledAppId
) -> ConductorResult<(InstalledApp, Vec<(CellId, CellError)>)>
Convenience function that uses the internal handle to enable an app
sourcepub async fn disable_app(
&self,
id: InstalledAppId,
reason: DisabledAppReason
) -> ConductorResult<InstalledApp>
pub async fn disable_app(
&self,
id: InstalledAppId,
reason: DisabledAppReason
) -> ConductorResult<InstalledApp>
Convenience function that uses the internal handle to disable an app
sourcepub async fn start_app(
&self,
id: InstalledAppId
) -> ConductorResult<InstalledApp>
pub async fn start_app(
&self,
id: InstalledAppId
) -> ConductorResult<InstalledApp>
Convenience function that uses the internal handle to start an app
sourcepub async fn pause_app(
&self,
id: InstalledAppId,
reason: PausedAppReason
) -> ConductorResult<InstalledApp>
pub async fn pause_app(
&self,
id: InstalledAppId,
reason: PausedAppReason
) -> ConductorResult<InstalledApp>
Convenience function that uses the internal handle to pause an app
sourcepub async fn setup_app_for_agent<'a, D>(
&mut self,
installed_app_id: &str,
agent: AgentPubKey,
dna_files: D
) -> ConductorApiResult<SweetApp> where
D: IntoIterator<Item = &'a DnaFile>,
pub async fn setup_app_for_agent<'a, D>(
&mut self,
installed_app_id: &str,
agent: AgentPubKey,
dna_files: D
) -> ConductorApiResult<SweetApp> where
D: IntoIterator<Item = &'a DnaFile>,
Opinionated app setup. Creates an app for the given agent, using the given DnaFiles, with no extra configuration.
sourcepub async fn setup_app<'a, D>(
&mut self,
installed_app_id: &str,
dna_files: D
) -> ConductorApiResult<SweetApp> where
D: IntoIterator<Item = &'a DnaFile>,
pub async fn setup_app<'a, D>(
&mut self,
installed_app_id: &str,
dna_files: D
) -> ConductorApiResult<SweetApp> where
D: IntoIterator<Item = &'a DnaFile>,
Opinionated app setup. Creates an app using the given DnaFiles, with no extra configuration. An AgentPubKey will be generated, and is accessible via the returned SweetApp.
sourcepub async fn setup_app_for_agents<'a, A, D>(
&mut self,
app_id_prefix: &str,
agents: A,
dna_files: D
) -> ConductorApiResult<SweetAppBatch> where
A: IntoIterator<Item = &'a AgentPubKey>,
D: IntoIterator<Item = &'a DnaFile>,
pub async fn setup_app_for_agents<'a, A, D>(
&mut self,
app_id_prefix: &str,
agents: A,
dna_files: D
) -> ConductorApiResult<SweetAppBatch> where
A: IntoIterator<Item = &'a AgentPubKey>,
D: IntoIterator<Item = &'a DnaFile>,
Opinionated app setup. Creates one app per agent, using the given DnaFiles.
All InstalledAppIds and AppRoleIds are auto-generated. In tests driven directly by Rust, you typically won’t care what these values are set to, but in case you do, they are set as so:
- InstalledAppId: {app_id_prefix}-{agent_pub_key}
- AppRoleId: {dna_hash}
Returns a batch of SweetApps, sorted in the same order as Agents passed in.
sourcepub fn signals(&mut self) -> impl Stream<Item = Signal>
pub fn signals(&mut self) -> impl Stream<Item = Signal>
Get a stream of all Signals emitted on the “sweet-interface” AppInterface.
This is designed to crash if called more than once, because as currently implemented, creating multiple signal streams would simply cause multiple consumers of the same underlying streams, not a fresh subscription
sourcepub async fn admin_ws_client(&self) -> (WebsocketSender, WebsocketReceiver)
pub async fn admin_ws_client(&self) -> (WebsocketSender, WebsocketReceiver)
Get a new websocket client which can send requests over the admin interface. It presupposes that an admin interface has been configured. (The standard_config includes an admin interface at port 0.)
sourcepub async fn shutdown(&mut self)
pub async fn shutdown(&mut self)
Shutdown this conductor. This will wait for the conductor to shutdown but keep the inner state to restart it.
Attempting to use this conductor without starting it up again will cause a panic.
sourcepub fn is_running(&self) -> bool
pub fn is_running(&self) -> bool
Check if this conductor is running
sourcepub fn inner_handle(&self) -> ConductorHandle
pub fn inner_handle(&self) -> ConductorHandle
Get the ConductorHandle within this Conductor. Be careful when using this, because this leaks out handles, which may make it harder to shut down the conductor during tests.
sourcepub async fn force_all_publish_dht_ops(&self)
pub async fn force_all_publish_dht_ops(&self)
Force trigger all dht ops that haven’t received enough validation receipts yet.
Methods from Deref<Target = SweetConductorHandle>
sourcepub fn handle(&self) -> ConductorHandle
pub fn handle(&self) -> ConductorHandle
Handle accessor.
sourcepub async fn call<I, O, F>(&self, zome: &SweetZome, fn_name: F, payload: I) -> O where
FunctionName: From<F>,
I: Serialize + Debug,
O: DeserializeOwned + Debug,
pub async fn call<I, O, F>(&self, zome: &SweetZome, fn_name: F, payload: I) -> O where
FunctionName: From<F>,
I: Serialize + Debug,
O: DeserializeOwned + Debug,
Make a zome call to a Cell, as if that Cell were the caller. Most common case. No capability is necessary, since the authorship capability is automatically granted.
sourcepub async fn call_fallible<I, O, F>(
&self,
zome: &SweetZome,
fn_name: F,
payload: I
) -> ConductorApiResult<O> where
FunctionName: From<F>,
I: Serialize + Debug,
O: DeserializeOwned + Debug,
pub async fn call_fallible<I, O, F>(
&self,
zome: &SweetZome,
fn_name: F,
payload: I
) -> ConductorApiResult<O> where
FunctionName: From<F>,
I: Serialize + Debug,
O: DeserializeOwned + Debug,
Like call
, but without the unwrap
sourcepub async fn call_from<I, O, F>(
&self,
provenance: &AgentPubKey,
cap_secret: Option<CapSecret>,
zome: &SweetZome,
fn_name: F,
payload: I
) -> O where
FunctionName: From<F>,
I: Serialize + Debug,
O: DeserializeOwned + Debug,
pub async fn call_from<I, O, F>(
&self,
provenance: &AgentPubKey,
cap_secret: Option<CapSecret>,
zome: &SweetZome,
fn_name: F,
payload: I
) -> O where
FunctionName: From<F>,
I: Serialize + Debug,
O: DeserializeOwned + Debug,
Make a zome call to a Cell, as if some other Cell were the caller. More general case. Can optionally provide a capability.
sourcepub async fn call_from_fallible<I, O, F>(
&self,
provenance: &AgentPubKey,
cap_secret: Option<CapSecret>,
zome: &SweetZome,
fn_name: F,
payload: I
) -> ConductorApiResult<O> where
FunctionName: From<F>,
I: Serialize + Debug,
O: DeserializeOwned + Debug,
pub async fn call_from_fallible<I, O, F>(
&self,
provenance: &AgentPubKey,
cap_secret: Option<CapSecret>,
zome: &SweetZome,
fn_name: F,
payload: I
) -> ConductorApiResult<O> where
FunctionName: From<F>,
I: Serialize + Debug,
O: DeserializeOwned + Debug,
Like call_from
, but without the unwrap
sourcepub async fn shutdown_and_wait(&self)
pub async fn shutdown_and_wait(&self)
Manually await shutting down the conductor. Conductors are already cleaned up on drop but this is useful if you need to know when it’s finished cleaning up.
Trait Implementations
sourceimpl AsRef<SweetConductorHandle> for SweetConductor
impl AsRef<SweetConductorHandle> for SweetConductor
sourcefn as_ref(&self) -> &SweetConductorHandle
fn as_ref(&self) -> &SweetConductorHandle
Performs the conversion.
sourceimpl Borrow<SweetConductorHandle> for SweetConductor
impl Borrow<SweetConductorHandle> for SweetConductor
sourcefn borrow(&self) -> &SweetConductorHandle
fn borrow(&self) -> &SweetConductorHandle
Immutably borrows from an owned value. Read more
sourceimpl Deref for SweetConductor
impl Deref for SweetConductor
type Target = SweetConductorHandle
type Target = SweetConductorHandle
The resulting type after dereferencing.
sourceimpl Drop for SweetConductor
impl Drop for SweetConductor
sourceimpl From<(Option<SweetConductorHandle>, TestEnvs, ConductorConfig, Vec<DnaFile, Global>, Option<Box<dyn Stream<Item = Signal> + Send + Sync + Unpin + 'static, Global>>)> for SweetConductor
impl From<(Option<SweetConductorHandle>, TestEnvs, ConductorConfig, Vec<DnaFile, Global>, Option<Box<dyn Stream<Item = Signal> + Send + Sync + Unpin + 'static, Global>>)> for SweetConductor
sourcefn from(
original: (Option<SweetConductorHandle>, TestEnvs, ConductorConfig, Vec<DnaFile>, Option<SignalStream>)
) -> SweetConductor
fn from(
original: (Option<SweetConductorHandle>, TestEnvs, ConductorConfig, Vec<DnaFile>, Option<SignalStream>)
) -> SweetConductor
Performs the conversion.
Auto Trait Implementations
impl !RefUnwindSafe for SweetConductor
impl Send for SweetConductor
impl Sync for SweetConductor
impl Unpin for SweetConductor
impl !UnwindSafe for SweetConductor
Blanket Implementations
impl<T> Any for T where
T: Any + ?Sized,
impl<T> Any for T where
T: Any + ?Sized,
fn type_id_compat(&self) -> TypeId
fn type_id_compat(&self) -> TypeId
TODO: once 1.33.0 is the minimum supported compiler version, remove Any::type_id_compat and use StdAny::type_id instead. https://github.com/rust-lang/rust/issues/27745 Read more
impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
type ArchivedMetadata = ()
type ArchivedMetadata = ()
The archived version of the pointer metadata for this type.
pub fn pointer_metadata(
&<T as ArchivePointee>::ArchivedMetadata
) -> <T as Pointee>::Metadata
pub fn pointer_metadata(
&<T as ArchivePointee>::ArchivedMetadata
) -> <T as Pointee>::Metadata
Converts some archived metadata to the pointer metadata for itself.
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcepub fn borrow_mut(&mut self) -> &mut T
pub fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<T> FutureExt for T
impl<T> FutureExt for T
fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
sourceimpl<T> Instrument for T
impl<T> Instrument for T
sourcefn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
sourcefn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
sourceimpl<T> Instrument for T
impl<T> Instrument for T
sourcefn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Instruments this type with the provided Span
, returning an
Instrumented
wrapper. Read more
sourcefn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
impl<T> Pointable for T
impl<T> Pointable for T
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
pub fn vzip(self) -> V
sourceimpl<T> WithSubscriber for T
impl<T> WithSubscriber for T
sourcefn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
Attaches the provided Subscriber
to this type, returning a
WithDispatch
wrapper. Read more
sourcefn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
Attaches the current default Subscriber
to this type, returning a
WithDispatch
wrapper. Read more
sourceimpl<T> WithSubscriber for T
impl<T> WithSubscriber for T
sourcefn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
Attaches the provided Subscriber
to this type, returning a
WithDispatch
wrapper. Read more
sourcefn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
Attaches the current default Subscriber
to this type, returning a
WithDispatch
wrapper. Read more