// This file is part of Gear.
//
// Copyright (C) 2021-2024 Gear Technologies Inc.
// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
use crate::common::{self, env, node::Convert, Args};
use anyhow::{anyhow, Context, Result};
use std::{
path::PathBuf,
process::{Command, Stdio},
};
fn demo_messenger() -> Result {
let path = PathBuf::from(env::bin("demo_messenger"));
let profile = if env::PROFILE == "debug" {
"dev"
} else {
env::PROFILE
};
if !path.exists()
&& !Command::new("cargo")
.args([
"build",
"-p",
"demo-messenger",
&format!("--profile={profile}"),
"--features",
"gcli",
])
.status()?
.success()
{
return Err(anyhow!("Failed to build demo-messenger with feature gcli"));
}
Ok(path)
}
#[test]
fn embedded_gcli() -> Result<()> {
let node = common::dev().context("failed to run dev node")?;
let demo = Command::new(demo_messenger()?)
.args(Vec::::from(Args::new("upload").endpoint(node.ws())))
.stderr(Stdio::piped())
.output()?;
let stderr = demo.stderr.convert();
assert!(
!stderr.contains("Submitted Gear::upload_program"),
"code should be uploaded, but got: {stderr}"
);
Ok(())
}