blob: 83a83d4d036e7010a67d672c0c5dd9306e20e922 [file]
/* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
use crate::streaming::common::test_setup::TestSetup;
use iggy::prelude::Identifier;
use server::configs::cluster::ClusterConfig;
use server::configs::server::{DataMaintenanceConfig, PersonalAccessTokenConfig};
use server::streaming::session::Session;
use server::streaming::systems::system::System;
use std::net::{Ipv4Addr, SocketAddr};
use tokio::fs;
#[tokio::test]
async fn should_initialize_system_and_base_directories() {
let setup = TestSetup::init().await;
let mut system = System::new(
setup.config.clone(),
ClusterConfig::default(),
DataMaintenanceConfig::default(),
PersonalAccessTokenConfig::default(),
);
system.init().await.unwrap();
let mut dir_entries = fs::read_dir(&setup.config.path).await.unwrap();
let mut names = Vec::new();
while let Some(entry) = dir_entries.next_entry().await.unwrap() {
let metadata = entry.metadata().await.unwrap();
assert!(metadata.is_dir());
names.push(entry.file_name().into_string().unwrap());
}
assert_eq!(names.len(), 3);
assert!(names.contains(&setup.config.stream.path));
}
#[tokio::test]
async fn should_create_and_persist_stream() {
let setup = TestSetup::init().await;
let mut system = System::new(
setup.config.clone(),
ClusterConfig::default(),
DataMaintenanceConfig::default(),
PersonalAccessTokenConfig::default(),
);
let stream_id = 1;
let stream_name = "test";
let session = Session::new(1, 1, SocketAddr::new(Ipv4Addr::LOCALHOST.into(), 1234));
system.init().await.unwrap();
system
.create_stream(&session, Some(stream_id), stream_name)
.await
.unwrap();
assert_persisted_stream(&setup.config.get_streams_path(), stream_id).await;
}
#[tokio::test]
async fn should_create_and_persist_stream_with_automatically_generated_id() {
let setup = TestSetup::init().await;
let mut system = System::new(
setup.config.clone(),
ClusterConfig::default(),
DataMaintenanceConfig::default(),
PersonalAccessTokenConfig::default(),
);
let stream_id = 1;
let stream_name = "test";
let session = Session::new(1, 1, SocketAddr::new(Ipv4Addr::LOCALHOST.into(), 1234));
system.init().await.unwrap();
system
.create_stream(&session, None, stream_name)
.await
.unwrap();
assert_persisted_stream(&setup.config.get_streams_path(), stream_id).await;
}
#[tokio::test]
async fn should_delete_persisted_stream() {
let setup = TestSetup::init().await;
let mut system = System::new(
setup.config.clone(),
ClusterConfig::default(),
DataMaintenanceConfig::default(),
PersonalAccessTokenConfig::default(),
);
let stream_id = 1;
let stream_name = "test";
let session = Session::new(1, 1, SocketAddr::new(Ipv4Addr::LOCALHOST.into(), 1234));
system.init().await.unwrap();
system
.create_stream(&session, Some(stream_id), stream_name)
.await
.unwrap();
assert_persisted_stream(&setup.config.get_streams_path(), stream_id).await;
let stream_path = system
.get_stream(&Identifier::numeric(stream_id).unwrap())
.unwrap()
.path
.clone();
system
.delete_stream(&session, &Identifier::numeric(1).unwrap())
.await
.unwrap();
assert!(fs::metadata(stream_path).await.is_err());
}
async fn assert_persisted_stream(streams_path: &str, stream_id: u32) {
let streams_metadata = fs::metadata(streams_path).await.unwrap();
assert!(streams_metadata.is_dir());
let stream_path = format!("{streams_path}/{stream_id}");
let stream_metadata = fs::metadata(stream_path).await.unwrap();
assert!(stream_metadata.is_dir());
}