You've already forked OpenIntegrations
mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2025-08-10 22:41:43 +02:00
FTP: Скачивание файлов
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
"MAIN ---"
|
||||
linux-vdso.so.1 (0x00007ffd29595000)
|
||||
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007a33b2c00000)
|
||||
libc.so.6 => /lib64/libc.so.6 (0x00007a33b2800000)
|
||||
libdl.so.2 => /lib64/libdl.so.2 (0x00007a33b2400000)
|
||||
/lib64/ld-linux-x86-64.so.2 (0x00007a33b3200000)
|
||||
linux-vdso.so.1 (0x00007fffdd9a1000)
|
||||
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007ce163200000)
|
||||
libc.so.6 => /lib64/libc.so.6 (0x00007ce162e00000)
|
||||
libdl.so.2 => /lib64/libdl.so.2 (0x00007ce162a00000)
|
||||
/lib64/ld-linux-x86-64.so.2 (0x00007ce163800000)
|
||||
GLIBC_2.2.5
|
||||
GLIBC_2.3
|
||||
GLIBC_2.3.4
|
||||
|
@@ -1,7 +1,7 @@
|
||||
use std::io::{copy, BufReader, Cursor, ErrorKind, Write};
|
||||
use std::io::{copy, BufReader, Cursor, ErrorKind, Read, Write};
|
||||
use std::net::{SocketAddr, TcpStream};
|
||||
use serde_json::json;
|
||||
use suppaftp::{FtpResult, FtpStream, Mode, RustlsConnector, RustlsFtpStream};
|
||||
use suppaftp::{FtpError, FtpResult, FtpStream, Mode, RustlsConnector, RustlsFtpStream};
|
||||
use suppaftp::list::File;
|
||||
use std::str::FromStr;
|
||||
use chrono::{DateTime, Utc};
|
||||
@@ -159,10 +159,7 @@ impl FtpClient {
|
||||
|
||||
pub fn upload_data(&mut self, path: &str, data: &[u8]) -> String {
|
||||
let mut cursor = Cursor::new(data);
|
||||
match self.upload_from_reader(path, &mut cursor) {
|
||||
Ok(bytes) => json!({"result": true, "bytes": bytes}).to_string(),
|
||||
Err(e) => format_json_error(e)
|
||||
}
|
||||
self.upload_from_reader(path, &mut cursor)
|
||||
}
|
||||
|
||||
pub fn upload_file(&mut self, path: &str, filepath: &str) -> String {
|
||||
@@ -172,12 +169,29 @@ impl FtpClient {
|
||||
};
|
||||
|
||||
let mut buf_reader = BufReader::new(file);
|
||||
match self.upload_from_reader(path, &mut buf_reader) {
|
||||
Ok(bytes) => json!({"result": true, "bytes": bytes}).to_string(),
|
||||
Err(e) => format_json_error(e)
|
||||
self.upload_from_reader(path, &mut buf_reader)
|
||||
|
||||
}
|
||||
|
||||
pub fn download_to_file(&mut self, path: &str, file_path: &str) -> String {
|
||||
|
||||
let mut file = match std::fs::File::create(file_path){
|
||||
Ok(f) => f,
|
||||
Err(e) => return format_json_error(format!("File error: {}", e))
|
||||
};
|
||||
|
||||
match self.download_to_writer(path, &mut file){
|
||||
Ok(b) => json!({"result": true, "bytes": b, "filepath": file_path}).to_string(),
|
||||
Err(e) => e
|
||||
}
|
||||
}
|
||||
|
||||
pub fn download_to_vec(&mut self, path: &str) -> Result<Vec<u8>, String> {
|
||||
let mut buffer = Vec::new();
|
||||
self.download_to_writer(path, &mut buffer)?;
|
||||
Ok(buffer)
|
||||
}
|
||||
|
||||
pub fn remove_file(&mut self, path: &str) -> String {
|
||||
|
||||
let result = match self {
|
||||
@@ -200,26 +214,42 @@ impl FtpClient {
|
||||
|
||||
}
|
||||
|
||||
fn upload_from_reader<R: std::io::Read>(
|
||||
pub fn rename_object(&mut self, path: &str, new_path: &str) -> String {
|
||||
|
||||
let result = match self {
|
||||
FtpClient::Secure(stream) => stream.rename(path, new_path),
|
||||
FtpClient::Insecure(stream) => stream.rename(path, new_path),
|
||||
};
|
||||
|
||||
match result {
|
||||
Ok(_) => json!({"result": true}).to_string(),
|
||||
Err(e) => format_json_error(&e.to_string())
|
||||
}
|
||||
}
|
||||
|
||||
fn upload_from_reader<R: Read>(
|
||||
&mut self,
|
||||
path: &str,
|
||||
reader: &mut R
|
||||
) -> Result<u64, String> {
|
||||
match self {
|
||||
) -> String {
|
||||
let result = match self {
|
||||
FtpClient::Secure(stream) => {
|
||||
|
||||
let mut data_stream = stream.put_with_stream(path)
|
||||
.map_err(|e| format!("Data stream error: {}", e))?;
|
||||
let mut data_stream = match stream.put_with_stream(path)
|
||||
.map_err(|e| format!("Data stream error: {}", e)){
|
||||
Ok(stream) => stream,
|
||||
Err(e) => return format_json_error(&e.to_string())
|
||||
};
|
||||
|
||||
let bytes = match copy(reader, &mut data_stream) {
|
||||
Ok(b) => {
|
||||
match wait_for_writable(&mut data_stream, Duration::from_secs(5)){
|
||||
Ok(_) => {},
|
||||
Err(e) => return Err(e)
|
||||
Err(e) => return format_json_error(e)
|
||||
};
|
||||
b
|
||||
},
|
||||
Err(e) => return Err(format!("Upload error: {}", &e.to_string()))
|
||||
Err(e) => return format_json_error(format!("Upload error: {}", &e.to_string()))
|
||||
};
|
||||
|
||||
stream.finalize_put_stream(data_stream)
|
||||
@@ -230,16 +260,46 @@ impl FtpClient {
|
||||
stream.put_file(path, reader)
|
||||
.map_err(|e| format!("File error: {}", e))
|
||||
}
|
||||
};
|
||||
|
||||
match result {
|
||||
Ok(b) => json!({"result": true, "bytes": b}).to_string(),
|
||||
Err(e) => format_json_error(&e.to_string())
|
||||
}
|
||||
}
|
||||
|
||||
fn download_to_writer<W: Write>(
|
||||
&mut self,
|
||||
path: &str,
|
||||
writer: &mut W,
|
||||
) -> Result<u64, String> {
|
||||
|
||||
let result = match self {
|
||||
FtpClient::Secure(stream) => {
|
||||
stream.retr(path, |stream| {
|
||||
copy(stream, writer).map_err(|e| FtpError::ConnectionError(e))
|
||||
})
|
||||
},
|
||||
FtpClient::Insecure(stream) => {
|
||||
stream.retr(path, |stream| {
|
||||
copy(stream, writer).map_err(|e| FtpError::ConnectionError(e))
|
||||
})
|
||||
},
|
||||
};
|
||||
|
||||
match result {
|
||||
Ok(b) => Ok(b),
|
||||
Err(e) => Err(format_json_error(e))
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fn get_size(&mut self, path: &str) -> FtpResult<usize> {
|
||||
match self {
|
||||
FtpClient::Secure(stream) => stream.size(path),
|
||||
FtpClient::Insecure(stream) => stream.size(path),
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
pub fn configure_ftp_client(
|
||||
|
@@ -33,7 +33,10 @@ pub const METHODS: &[&[u16]] = &[
|
||||
name!("RemoveFile"),
|
||||
name!("GetConfiguration"),
|
||||
name!("IsTls"),
|
||||
name!("GetObjectSize")
|
||||
name!("GetObjectSize"),
|
||||
name!("RenameObject"),
|
||||
name!("DownloadToFile"),
|
||||
name!("DownloadToBuffer"),
|
||||
];
|
||||
|
||||
// Число параметров функций компоненты
|
||||
@@ -54,6 +57,9 @@ pub fn get_params_amount(num: usize) -> usize {
|
||||
12 => 0,
|
||||
13 => 0,
|
||||
14 => 1,
|
||||
15 => 2,
|
||||
16 => 2,
|
||||
17 => 1,
|
||||
_ => 0,
|
||||
}
|
||||
}
|
||||
@@ -163,6 +169,41 @@ pub fn cal_func(obj: &mut AddIn, num: usize, params: &mut [Variant]) -> Box<dyn
|
||||
Err(e) => e.to_string()
|
||||
})
|
||||
},
|
||||
|
||||
15 => {
|
||||
let path = params[0].get_string().unwrap_or("".to_string());
|
||||
let new_path = params[1].get_string().unwrap_or("".to_string());
|
||||
|
||||
Box::new(match &mut obj.get_client(){
|
||||
Ok(c) => c.rename_object(&path, &new_path),
|
||||
Err(e) => e.to_string()
|
||||
})
|
||||
|
||||
},
|
||||
|
||||
16 => {
|
||||
let path = params[0].get_string().unwrap_or("".to_string());
|
||||
let filepath = params[1].get_string().unwrap_or("".to_string());
|
||||
|
||||
Box::new(match &mut obj.get_client(){
|
||||
Ok(c) => c.download_to_file(&path, &filepath),
|
||||
Err(e) => e.to_string()
|
||||
})
|
||||
},
|
||||
|
||||
17 => {
|
||||
let path = params[0].get_string().unwrap_or("".to_string());
|
||||
|
||||
match &mut obj.get_client(){
|
||||
Ok(c) => {
|
||||
match c.download_to_vec(&path){
|
||||
Ok(v) => Box::new(v),
|
||||
Err(e) => Box::new(e)
|
||||
}
|
||||
},
|
||||
Err(e) => Box::new(e.to_string())
|
||||
}
|
||||
},
|
||||
_ => Box::new(false), // Неверный номер команды
|
||||
};
|
||||
|
||||
|
@@ -6,26 +6,28 @@ use base64::{Engine as _, engine::general_purpose};
|
||||
use suppaftp::FtpError;
|
||||
use crate::component::configuration::{FtpProxySettings, FtpSettings};
|
||||
use std::fmt::Write as FmtWrite;
|
||||
use std::vec::IntoIter;
|
||||
|
||||
pub fn make_passive_proxy_stream(
|
||||
ftp_settings: &FtpSettings,
|
||||
proxy_settings: &Option<FtpProxySettings>,
|
||||
addr: SocketAddr) -> Result<TcpStream, FtpError> {
|
||||
|
||||
let redirect = match ftp_settings.advanced_resolve{
|
||||
let redirect = match ftp_settings.advanced_resolve {
|
||||
true => {
|
||||
if proxy_settings.is_some() || addr.ip().is_loopback() {
|
||||
if proxy_settings.is_some() || addr.ip().is_loopback() {
|
||||
Some(&ftp_settings.domain)
|
||||
}else { None }
|
||||
},
|
||||
false => None
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
false => None,
|
||||
};
|
||||
|
||||
let corrected_addr = if redirect.is_some() {
|
||||
match redirect.unwrap().parse::<std::net::IpAddr>() {
|
||||
Ok(ftp_ip) => {
|
||||
SocketAddr::new(ftp_ip, addr.port())
|
||||
},
|
||||
let corrected_addr = if let Some(domain) = redirect {
|
||||
|
||||
match get_socket_addr(domain, addr.port()) {
|
||||
Ok(mut addrs) => addrs.next().unwrap_or(addr),
|
||||
Err(_) => addr,
|
||||
}
|
||||
} else {
|
||||
@@ -189,6 +191,11 @@ pub fn connect_via_http_proxy(proxy_settings: &FtpProxySettings, target_addr: (&
|
||||
}
|
||||
|
||||
|
||||
fn get_socket_addr(host: &str, port: u16) -> Result<IntoIter<SocketAddr>, String> {
|
||||
let host_and_port = format!("{}:{}", host, port);
|
||||
host_and_port.to_socket_addrs().map_err(|e| e.to_string())
|
||||
}
|
||||
|
||||
fn connect_direct(addr: (&str, u16)) -> Result<TcpStream, String> {
|
||||
let target_addr = format!("{}:{}", addr.0, addr.1);
|
||||
TcpStream::connect(&target_addr).map_err(|e| format!("Direct connection error: {}", e))
|
||||
|
BIN
src/en/OInt/addins/OPI_FTP.zip
vendored
BIN
src/en/OInt/addins/OPI_FTP.zip
vendored
Binary file not shown.
Binary file not shown.
BIN
src/ru/OInt/addins/OPI_FTP.zip
vendored
BIN
src/ru/OInt/addins/OPI_FTP.zip
vendored
Binary file not shown.
@@ -194,6 +194,43 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Переименовать объект
|
||||
// Изменяет путь объекта на указанный
|
||||
//
|
||||
// Примечание:
|
||||
// Возможность перемещения объекта из одного каталога в другой при помощи переименования зависит от настроек сервера
|
||||
//
|
||||
// Параметры:
|
||||
// Соединение - Произвольный - Существующее соединение или конфигурация соединения - conn
|
||||
// Путь - Строка - Текущий путь к объекту - old
|
||||
// НовыйПуть - Строка - Новый путь к объекту - new
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие Из КлючИЗначение - Результат обработки
|
||||
Функция ПереименоватьОбъект(Знач Соединение, Знач Путь, Знач НовыйПуть) Экспорт
|
||||
|
||||
ЗакрыватьСоединение = ПроверитьСоздатьСоединение(Соединение);
|
||||
|
||||
Если Не ЭтоКоннектор(Соединение) Тогда
|
||||
Возврат Соединение;
|
||||
Иначе
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(НовыйПуть);
|
||||
|
||||
Результат = Соединение.RenameObject(Путь, НовыйПуть);
|
||||
Результат = OPI_Инструменты.JsonВСтруктуру(Результат);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если ЗакрыватьСоединение Тогда
|
||||
Результат.Вставить("close_connection", ЗакрытьСоединение(Соединение));
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Это коннектор !NOCLI
|
||||
// Проверяет, что значение является объектом внешней компоненты для работы с FTP
|
||||
//
|
||||
@@ -544,6 +581,40 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Сохранить файл
|
||||
// Сохраняет файл с сервера по указанному пути
|
||||
//
|
||||
// Параметры:
|
||||
// Соединение - Произвольный - Существующее соединение или конфигурация соединения - conn
|
||||
// Путь - Строка - Путь файла на сервере - path
|
||||
// ИмяФайла - Строка - Путь для сохранения файла на диске - file
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие Из КлючИЗначение - Результат обработки
|
||||
Функция СохранитьФайл(Знач Соединение, Знач Путь, Знач ИмяФайла) Экспорт
|
||||
|
||||
ЗакрыватьСоединение = ПроверитьСоздатьСоединение(Соединение);
|
||||
|
||||
Если Не ЭтоКоннектор(Соединение) Тогда
|
||||
Возврат Соединение;
|
||||
Иначе
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(ИмяФайла);
|
||||
|
||||
Результат = Соединение.DownloadToFile(Путь, ИмяФайла);
|
||||
Результат = OPI_Инструменты.JsonВСтруктуру(Результат);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если ЗакрыватьСоединение Тогда
|
||||
Результат.Вставить("close_connection", ЗакрытьСоединение(Соединение));
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
||||
|
@@ -327,9 +327,9 @@
|
||||
НовыйТест(ТаблицаТестов, "OAI_РаботаСФайлами" , "Работа с файлами" , OpenAI);
|
||||
НовыйТест(ТаблицаТестов, "OAI_РаботаСАудио" , "Работа с аудио" , OpenAI);
|
||||
НовыйТест(ТаблицаТестов, "OAI_РаботаСМоделями" , "Работа с моделями" , OpenAI);
|
||||
НовыйТест(ТаблицаТестов, "FT_ОсновныеМетоды" , "Основные методы" , FTP);
|
||||
НовыйТест(ТаблицаТестов, "FT_РаботаСДиректориями" , "Работа с директориями" , FTP);
|
||||
НовыйТест(ТаблицаТестов, "FT_РаботаСФайлами" , "Работа с файлами" , FTP);
|
||||
НовыйТест(ТаблицаТестов, "FT_ОсновныеМетоды" , "Основные методы" , FTP);
|
||||
|
||||
Возврат ТаблицаТестов;
|
||||
|
||||
|
215
src/ru/OPI/src/CommonModules/OPI_Тесты/Module.bsl
vendored
215
src/ru/OPI/src/CommonModules/OPI_Тесты/Module.bsl
vendored
@@ -2866,26 +2866,6 @@
|
||||
|
||||
#Область FTP
|
||||
|
||||
Процедура FT_ОсновныеМетоды() Экспорт
|
||||
|
||||
МассивВариантов = OPI_ПолучениеДанныхТестов.ПолучитьВариантыПараметровFTP();
|
||||
|
||||
Для Каждого ПараметрыТеста Из МассивВариантов Цикл
|
||||
|
||||
FTP_ОткрытьСоединение(ПараметрыТеста);
|
||||
FTP_ПолучитьПриветственноеСообщение(ПараметрыТеста);
|
||||
FTP_ПолучитьКонфигурациюСоединения(ПараметрыТеста);
|
||||
FTP_ЗакрытьСоединение(ПараметрыТеста);
|
||||
FTP_ЭтоКоннектор(ПараметрыТеста);
|
||||
FTP_ПолучитьНастройкиСоединения(ПараметрыТеста);
|
||||
FTP_ПолучитьНастройкиПрокси(ПараметрыТеста);
|
||||
FTP_ПолучитьНастройкиTls(ПараметрыТеста);
|
||||
FTP_ПолучитьРазмерОбъекта(ПараметрыТеста);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура FT_РаботаСДиректориями() Экспорт
|
||||
|
||||
МассивВариантов = OPI_ПолучениеДанныхТестов.ПолучитьВариантыПараметровFTP();
|
||||
@@ -2908,12 +2888,34 @@
|
||||
Для Каждого ПараметрыТеста Из МассивВариантов Цикл
|
||||
|
||||
FTP_ЗагрузитьФайл(ПараметрыТеста);
|
||||
FTP_СохранитьФайл(ПараметрыТеста);
|
||||
FTP_УдалитьФайл(ПараметрыТеста);
|
||||
|
||||
КонецЦикла
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура FT_ОсновныеМетоды() Экспорт
|
||||
|
||||
МассивВариантов = OPI_ПолучениеДанныхТестов.ПолучитьВариантыПараметровFTP();
|
||||
|
||||
Для Каждого ПараметрыТеста Из МассивВариантов Цикл
|
||||
|
||||
FTP_ОткрытьСоединение(ПараметрыТеста);
|
||||
FTP_ПолучитьПриветственноеСообщение(ПараметрыТеста);
|
||||
FTP_ПолучитьКонфигурациюСоединения(ПараметрыТеста);
|
||||
FTP_ЗакрытьСоединение(ПараметрыТеста);
|
||||
FTP_ЭтоКоннектор(ПараметрыТеста);
|
||||
FTP_ПолучитьНастройкиСоединения(ПараметрыТеста);
|
||||
FTP_ПолучитьНастройкиПрокси(ПараметрыТеста);
|
||||
FTP_ПолучитьНастройкиTls(ПараметрыТеста);
|
||||
FTP_ПолучитьРазмерОбъекта(ПараметрыТеста);
|
||||
FTP_ПереименоватьОбъект(ПараметрыТеста);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
||||
@@ -25593,6 +25595,179 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура FTP_ПереименоватьОбъект(ПараметрыФункции)
|
||||
|
||||
Хост = ПараметрыФункции["FTP_IP"];
|
||||
Порт = ПараметрыФункции["FTP_Port"];
|
||||
Логин = ПараметрыФункции["FTP_User"];
|
||||
Пароль = ПараметрыФункции["FTP_Password"];
|
||||
|
||||
ИспользоватьПрокси = Истина;
|
||||
FTPS = Истина;
|
||||
|
||||
НастройкиПрокси = Неопределено;
|
||||
НастройкиTls = Неопределено; // FTPS
|
||||
|
||||
ИспользоватьПрокси = ПараметрыФункции["Proxy"]; // SKIP
|
||||
FTPS = ПараметрыФункции["TLS"]; // SKIP
|
||||
|
||||
НастройкиFTP = OPI_FTP.ПолучитьНастройкиСоединения(Хост, Порт, Логин, Пароль);
|
||||
|
||||
Если ИспользоватьПрокси Тогда
|
||||
|
||||
ТипПрокси = ПараметрыФункции["Proxy_Type"]; // http, socks5, socks4
|
||||
|
||||
АдресПрокси = ПараметрыФункции["Proxy_IP"];
|
||||
ПортПрокси = ПараметрыФункции["Proxy_Port"];
|
||||
ЛогинПрокси = ПараметрыФункции["Proxy_User"];
|
||||
ПарольПрокси = ПараметрыФункции["Proxy_Password"];
|
||||
|
||||
НастройкиПрокси = OPI_FTP.ПолучитьНастройкиПрокси(АдресПрокси, ПортПрокси, ТипПрокси, ЛогинПрокси, ПарольПрокси);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если FTPS Тогда
|
||||
НастройкиTls = OPI_FTP.ПолучитьНастройкиTls(Истина);
|
||||
КонецЕсли;
|
||||
|
||||
Соединение = OPI_FTP.ОткрытьСоединение(НастройкиFTP, НастройкиПрокси, НастройкиTls);
|
||||
|
||||
Если OPI_FTP.ЭтоКоннектор(Соединение) Тогда
|
||||
Результат = OPI_FTP.ПереименоватьОбъект(Соединение, "new_dir/big.bin", "new_dir/giant.bin");
|
||||
Иначе
|
||||
Результат = Соединение; // Ошибка соединения
|
||||
КонецЕсли;
|
||||
|
||||
// END
|
||||
|
||||
Постфикс = ПараметрыФункции["Postfix"];
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПереименоватьОбъект" + Постфикс, "FTP");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Результат);
|
||||
|
||||
Результат = OPI_FTP.ПолучитьРазмерОбъекта(Соединение, "new_dir/giant.bin");
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПереименоватьОбъект (проверка, новый)" + Постфикс, "FTP");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Результат);
|
||||
|
||||
Результат = OPI_FTP.ПолучитьРазмерОбъекта(Соединение, "new_dir/big.bin");
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПереименоватьОбъект (проверка, старый)" + Постфикс, "FTP");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_РезультатЛожь(Результат);
|
||||
|
||||
Результат = OPI_FTP.ПереименоватьОбъект(Соединение, "new_dir", "brand_new_dir");
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПереименоватьОбъект (каталог)" + Постфикс, "FTP");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Результат);
|
||||
|
||||
Результат = OPI_FTP.ПолучитьСписокОбъектов(Соединение, ".", Истина);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПереименоватьОбъект (список)", "FTP");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Результат);
|
||||
OPI_ПолучениеДанныхТестов.Проверка_Массив(Результат["data"], 1);
|
||||
OPI_ПолучениеДанныхТестов.Проверка_Равенство(Результат["data"][0]["path"], "brand_new_dir");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_Равенство(Результат["data"][0]["objects"][0]["path"], "brand_new_dir/giant.bin");
|
||||
|
||||
Результат = OPI_FTP.ПереименоватьОбъект(Соединение, "brand_new_dir", "new_dir");
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПереименоватьОбъект (каталог, обратно)" + Постфикс, "FTP");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Результат);
|
||||
|
||||
Результат = OPI_FTP.ПереименоватьОбъект(Соединение, "new_dir/giant.bin", "new_dir/big.bin");
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПереименоватьОбъект (обратно)" + Постфикс, "FTP");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Результат);
|
||||
|
||||
Результат = OPI_FTP.ПолучитьСписокОбъектов(Соединение, ".", Истина);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПереименоватьОбъект (список, обратно)", "FTP");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Результат);
|
||||
OPI_ПолучениеДанныхТестов.Проверка_Массив(Результат["data"], 1);
|
||||
OPI_ПолучениеДанныхТестов.Проверка_Равенство(Результат["data"][0]["path"], "new_dir");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_Равенство(Результат["data"][0]["objects"][0]["path"], "new_dir/big.bin");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура FTP_СохранитьФайл(ПараметрыФункции)
|
||||
|
||||
Хост = ПараметрыФункции["FTP_IP"];
|
||||
Порт = ПараметрыФункции["FTP_Port"];
|
||||
Логин = ПараметрыФункции["FTP_User"];
|
||||
Пароль = ПараметрыФункции["FTP_Password"];
|
||||
|
||||
ИспользоватьПрокси = Истина;
|
||||
FTPS = Истина;
|
||||
|
||||
НастройкиПрокси = Неопределено;
|
||||
НастройкиTls = Неопределено; // FTPS
|
||||
|
||||
ИспользоватьПрокси = ПараметрыФункции["Proxy"]; // SKIP
|
||||
FTPS = ПараметрыФункции["TLS"]; // SKIP
|
||||
|
||||
НастройкиFTP = OPI_FTP.ПолучитьНастройкиСоединения(Хост, Порт, Логин, Пароль);
|
||||
|
||||
Если ИспользоватьПрокси Тогда
|
||||
|
||||
ТипПрокси = ПараметрыФункции["Proxy_Type"]; // http, socks5, socks4
|
||||
|
||||
АдресПрокси = ПараметрыФункции["Proxy_IP"];
|
||||
ПортПрокси = ПараметрыФункции["Proxy_Port"];
|
||||
ЛогинПрокси = ПараметрыФункции["Proxy_User"];
|
||||
ПарольПрокси = ПараметрыФункции["Proxy_Password"];
|
||||
|
||||
НастройкиПрокси = OPI_FTP.ПолучитьНастройкиПрокси(АдресПрокси, ПортПрокси, ТипПрокси, ЛогинПрокси, ПарольПрокси);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если FTPS Тогда
|
||||
НастройкиTls = OPI_FTP.ПолучитьНастройкиTls(Истина);
|
||||
КонецЕсли;
|
||||
|
||||
Соединение = OPI_FTP.ОткрытьСоединение(НастройкиFTP, НастройкиПрокси, НастройкиTls);
|
||||
|
||||
Если OPI_FTP.ЭтоКоннектор(Соединение) Тогда
|
||||
|
||||
Путь = "new_dir/big.bin";
|
||||
ИмяФайла = ПолучитьИмяВременногоФайла("bin");
|
||||
|
||||
Результат = OPI_FTP.СохранитьФайл(Соединение, Путь, ИмяФайла);
|
||||
|
||||
Иначе
|
||||
Результат = Соединение; // Ошибка соединения
|
||||
КонецЕсли;
|
||||
|
||||
// END
|
||||
|
||||
Постфикс = ПараметрыФункции["Postfix"];
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СохранитьФайл" + Постфикс, "FTP");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Результат);
|
||||
|
||||
Размер = OPI_FTP.ПолучитьРазмерОбъекта(Соединение, Путь);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Размер, "СохранитьФайл (размер)" + Постфикс, "FTP");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Размер);
|
||||
|
||||
ФайлОбъект = Новый Файл(ИмяФайла);
|
||||
|
||||
РазмерФайла = ФайлОбъект.Размер();
|
||||
РазмерРезультата = Результат["bytes"];
|
||||
РазмерПроверки = Размер["bytes"];
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(РазмерФайла, "СохранитьФайл (размер файла)" + Постфикс, "FTP");
|
||||
|
||||
OPI_ПолучениеДанныхТестов.Проверка_Равенство(РазмерФайла, РазмерРезультата);
|
||||
OPI_ПолучениеДанныхТестов.Проверка_Равенство(РазмерФайла, РазмерПроверки);
|
||||
|
||||
Попытка
|
||||
УдалитьФайлы(ИмяФайла);
|
||||
Исключение
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(ОписаниеОшибки(), "Ошибка удаления файла картинки", "FTP");
|
||||
КонецПопытки;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
||||
|
252
src/ru/OPI/src/CommonModules/OPI_ТестыCLI/Module.bsl
vendored
252
src/ru/OPI/src/CommonModules/OPI_ТестыCLI/Module.bsl
vendored
@@ -2778,6 +2778,8 @@
|
||||
CLI_FTP_ПолучитьНастройкиПрокси(ПараметрыТеста);
|
||||
CLI_FTP_ПолучитьНастройкиTls(ПараметрыТеста);
|
||||
CLI_FTP_ПолучитьРазмерОбъекта(ПараметрыТеста);
|
||||
CLI_FTP_ПереименоватьОбъект(ПараметрыТеста);
|
||||
|
||||
OPI_Инструменты.Пауза(5);
|
||||
|
||||
КонецЦикла;
|
||||
@@ -2794,6 +2796,7 @@
|
||||
CLI_FTP_СоздатьДиректорию(ПараметрыТеста);
|
||||
CLI_FTP_ПолучитьСписокОбъектов(ПараметрыТеста);
|
||||
CLI_FTP_УдалитьДиректорию(ПараметрыТеста);
|
||||
|
||||
OPI_Инструменты.Пауза(5);
|
||||
|
||||
КонецЦикла;
|
||||
@@ -2807,7 +2810,9 @@
|
||||
Для Каждого ПараметрыТеста Из МассивВариантов Цикл
|
||||
|
||||
CLI_FTP_ЗагрузитьФайл(ПараметрыТеста);
|
||||
CLI_FTP_СохранитьФайл(ПараметрыТеста);
|
||||
CLI_FTP_УдалитьФайл(ПараметрыТеста);
|
||||
|
||||
OPI_Инструменты.Пауза(5);
|
||||
|
||||
КонецЦикла
|
||||
@@ -27256,6 +27261,253 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура CLI_FTP_ПереименоватьОбъект(ПараметрыФункции)
|
||||
|
||||
Домен = ПараметрыФункции["FTP_IP"];
|
||||
Порт = ПараметрыФункции["FTP_Port"];
|
||||
Логин = ПараметрыФункции["FTP_User"];
|
||||
Пароль = ПараметрыФункции["FTP_Password"];
|
||||
|
||||
ИспользоватьПрокси = Истина;
|
||||
FTPS = Истина;
|
||||
|
||||
НастройкиПрокси = Неопределено;
|
||||
НастройкиTls = Неопределено; // FTPS
|
||||
|
||||
ИспользоватьПрокси = ПараметрыФункции["Proxy"]; // SKIP
|
||||
FTPS = ПараметрыФункции["TLS"]; // SKIP
|
||||
|
||||
Опции = Новый Структура;
|
||||
Опции.Вставить("host" , Домен);
|
||||
Опции.Вставить("port" , Порт);
|
||||
Опции.Вставить("login", Логин);
|
||||
Опции.Вставить("pass" , Пароль);
|
||||
|
||||
НастройкиFTP = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("ftp", "ПолучитьНастройкиСоединения", Опции);
|
||||
|
||||
Если ИспользоватьПрокси Тогда
|
||||
|
||||
ТипПрокси = ПараметрыФункции["Proxy_Type"]; // http, socks5, socks4
|
||||
|
||||
АдресПрокси = ПараметрыФункции["Proxy_IP"];
|
||||
ПортПрокси = ПараметрыФункции["Proxy_Port"];
|
||||
ЛогинПрокси = ПараметрыФункции["Proxy_User"];
|
||||
ПарольПрокси = ПараметрыФункции["Proxy_Password"];
|
||||
|
||||
Опции = Новый Структура;
|
||||
Опции.Вставить("addr" , АдресПрокси);
|
||||
Опции.Вставить("port" , ПортПрокси);
|
||||
Опции.Вставить("type" , ТипПрокси);
|
||||
Опции.Вставить("login", ЛогинПрокси);
|
||||
Опции.Вставить("pass" , ПарольПрокси);
|
||||
|
||||
НастройкиПрокси = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("ftp", "ПолучитьНастройкиПрокси", Опции);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если FTPS Тогда
|
||||
|
||||
Опции = Новый Структура;
|
||||
Опции.Вставить("trust", Истина);
|
||||
|
||||
НастройкиTLS = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("ftp", "ПолучитьНастройкиTls", Опции);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Опции = Новый Структура;
|
||||
Опции.Вставить("set", НастройкиFTP);
|
||||
|
||||
Опции = Новый Структура;
|
||||
Опции.Вставить("set" , НастройкиFTP);
|
||||
Опции.Вставить("proxy", НастройкиПрокси);
|
||||
Опции.Вставить("tls" , НастройкиTLS);
|
||||
|
||||
Соединение = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("ftp", "ПолучитьКонфигурациюСоединения", Опции);
|
||||
|
||||
Опции.Вставить("conn", Соединение);
|
||||
Опции.Вставить("old", "new_dir/big.bin");
|
||||
Опции.Вставить("new", "new_dir/giant.bin");
|
||||
|
||||
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("ftp", "ПереименоватьОбъект", Опции);
|
||||
|
||||
Постфикс = ПараметрыФункции["Postfix"];
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛогCLI(Результат, "ПереименоватьОбъект" + Постфикс, "FTP");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Результат);
|
||||
|
||||
Опции.Вставить("conn", Соединение);
|
||||
Опции.Вставить("path", "new_dir/giant.bin");
|
||||
|
||||
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("ftp", "ПолучитьРазмерОбъекта", Опции);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛогCLI(Результат, "ПереименоватьОбъект (проверка, новый)" + Постфикс, "FTP");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Результат);
|
||||
|
||||
Опции.Вставить("conn", Соединение);
|
||||
Опции.Вставить("path", "new_dir/big.bin");
|
||||
|
||||
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("ftp", "ПолучитьРазмерОбъекта", Опции);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛогCLI(Результат, "ПереименоватьОбъект (проверка, старый)" + Постфикс, "FTP");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_РезультатЛожь(Результат);
|
||||
|
||||
Опции.Вставить("conn", Соединение);
|
||||
Опции.Вставить("old", "new_dir");
|
||||
Опции.Вставить("new", "brand_new_dir");
|
||||
|
||||
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("ftp", "ПереименоватьОбъект", Опции);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛогCLI(Результат, "ПереименоватьОбъект (каталог)" + Постфикс, "FTP");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Результат);
|
||||
|
||||
Опции.Вставить("conn", Соединение);
|
||||
Опции.Вставить("path", ".");
|
||||
Опции.Вставить("rcv" , Истина);
|
||||
|
||||
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("ftp", "ПолучитьСписокОбъектов", Опции);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛогCLI(Результат, "ПереименоватьОбъект (список)", "FTP");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Результат);
|
||||
OPI_ПолучениеДанныхТестов.Проверка_Массив(Результат["data"], 1);
|
||||
OPI_ПолучениеДанныхТестов.Проверка_Равенство(Результат["data"][0]["path"], "brand_new_dir");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_Равенство(Результат["data"][0]["objects"][0]["path"], "brand_new_dir/giant.bin");
|
||||
|
||||
Опции.Вставить("conn", Соединение);
|
||||
Опции.Вставить("new", "new_dir");
|
||||
Опции.Вставить("old", "brand_new_dir");
|
||||
|
||||
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("ftp", "ПереименоватьОбъект", Опции);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛогCLI(Результат, "ПереименоватьОбъект (каталог, обратно)" + Постфикс, "FTP");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Результат);
|
||||
|
||||
Опции.Вставить("conn", Соединение);
|
||||
Опции.Вставить("new", "new_dir/big.bin");
|
||||
Опции.Вставить("old", "new_dir/giant.bin");
|
||||
|
||||
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("ftp", "ПереименоватьОбъект", Опции);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛогCLI(Результат, "ПереименоватьОбъект (обратно)" + Постфикс, "FTP");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Результат);
|
||||
|
||||
Опции.Вставить("conn", Соединение);
|
||||
Опции.Вставить("path", ".");
|
||||
Опции.Вставить("rcv" , Истина);
|
||||
|
||||
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("ftp", "ПолучитьСписокОбъектов", Опции);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛогCLI(Результат, "ПереименоватьОбъект (список, обратно)", "FTP");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Результат);
|
||||
OPI_ПолучениеДанныхТестов.Проверка_Массив(Результат["data"], 1);
|
||||
OPI_ПолучениеДанныхТестов.Проверка_Равенство(Результат["data"][0]["path"], "new_dir");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_Равенство(Результат["data"][0]["objects"][0]["path"], "new_dir/big.bin");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура CLI_FTP_СохранитьФайл(ПараметрыФункции)
|
||||
|
||||
Домен = ПараметрыФункции["FTP_IP"];
|
||||
Порт = ПараметрыФункции["FTP_Port"];
|
||||
Логин = ПараметрыФункции["FTP_User"];
|
||||
Пароль = ПараметрыФункции["FTP_Password"];
|
||||
|
||||
ИспользоватьПрокси = Истина;
|
||||
FTPS = Истина;
|
||||
|
||||
НастройкиПрокси = Неопределено;
|
||||
НастройкиTls = Неопределено; // FTPS
|
||||
|
||||
ИспользоватьПрокси = ПараметрыФункции["Proxy"]; // SKIP
|
||||
FTPS = ПараметрыФункции["TLS"]; // SKIP
|
||||
|
||||
Опции = Новый Структура;
|
||||
Опции.Вставить("host" , Домен);
|
||||
Опции.Вставить("port" , Порт);
|
||||
Опции.Вставить("login", Логин);
|
||||
Опции.Вставить("pass" , Пароль);
|
||||
|
||||
НастройкиFTP = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("ftp", "ПолучитьНастройкиСоединения", Опции);
|
||||
|
||||
Если ИспользоватьПрокси Тогда
|
||||
|
||||
ТипПрокси = ПараметрыФункции["Proxy_Type"]; // http, socks5, socks4
|
||||
|
||||
АдресПрокси = ПараметрыФункции["Proxy_IP"];
|
||||
ПортПрокси = ПараметрыФункции["Proxy_Port"];
|
||||
ЛогинПрокси = ПараметрыФункции["Proxy_User"];
|
||||
ПарольПрокси = ПараметрыФункции["Proxy_Password"];
|
||||
|
||||
Опции = Новый Структура;
|
||||
Опции.Вставить("addr" , АдресПрокси);
|
||||
Опции.Вставить("port" , ПортПрокси);
|
||||
Опции.Вставить("type" , ТипПрокси);
|
||||
Опции.Вставить("login", ЛогинПрокси);
|
||||
Опции.Вставить("pass" , ПарольПрокси);
|
||||
|
||||
НастройкиПрокси = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("ftp", "ПолучитьНастройкиПрокси", Опции);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если FTPS Тогда
|
||||
|
||||
Опции = Новый Структура;
|
||||
Опции.Вставить("trust", Истина);
|
||||
|
||||
НастройкиTLS = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("ftp", "ПолучитьНастройкиTls", Опции);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Опции = Новый Структура;
|
||||
Опции.Вставить("set", НастройкиFTP);
|
||||
|
||||
Опции = Новый Структура;
|
||||
Опции.Вставить("set" , НастройкиFTP);
|
||||
Опции.Вставить("proxy", НастройкиПрокси);
|
||||
Опции.Вставить("tls" , НастройкиTLS);
|
||||
|
||||
Соединение = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("ftp", "ПолучитьКонфигурациюСоединения", Опции);
|
||||
|
||||
Путь = "new_dir/big.bin";
|
||||
ИмяФайла = ПолучитьИмяВременногоФайла("bin");
|
||||
|
||||
Опции.Вставить("conn", Соединение);
|
||||
Опции.Вставить("path", Путь);
|
||||
Опции.Вставить("file", ИмяФайла);
|
||||
|
||||
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("ftp", "СохранитьФайл", Опции);
|
||||
|
||||
Постфикс = ПараметрыФункции["Postfix"];
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛогCLI(Результат, "СохранитьФайл" + Постфикс, "FTP");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Результат);
|
||||
|
||||
Опции.Вставить("conn", Соединение);
|
||||
Опции.Вставить("path", Путь);
|
||||
|
||||
Размер = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("ftp", "ПолучитьРазмерОбъекта", Опции);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛогCLI(Размер, "СохранитьФайл (размер)" + Постфикс, "FTP");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Размер);
|
||||
|
||||
ФайлОбъект = Новый Файл(ИмяФайла);
|
||||
|
||||
РазмерФайла = ФайлОбъект.Размер();
|
||||
РазмерРезультата = Результат["bytes"];
|
||||
РазмерПроверки = Размер["bytes"];
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛогCLI(РазмерФайла, "СохранитьФайл (размер файла)" + Постфикс, "FTP");
|
||||
|
||||
OPI_ПолучениеДанныхТестов.Проверка_Равенство(РазмерФайла, РазмерРезультата);
|
||||
OPI_ПолучениеДанныхТестов.Проверка_Равенство(РазмерФайла, РазмерПроверки);
|
||||
|
||||
Попытка
|
||||
УдалитьФайлы(ИмяФайла);
|
||||
Исключение
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(ОписаниеОшибки(), "Ошибка удаления файла картинки", "FTP");
|
||||
КонецПопытки;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
||||
|
Binary file not shown.
Reference in New Issue
Block a user