1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
|
#![cfg_attr(read_buf, feature(read_buf))]
#![cfg_attr(read_buf, feature(core_io_borrowed_buf))]
use std::cell::RefCell;
#[macro_use]
mod macros;
#[cfg(feature = "ring")]
#[path = "."]
mod tests_with_ring {
use super::*;
provider_ring!();
#[path = "../api.rs"]
mod tests;
}
#[cfg(feature = "aws_lc_rs")]
#[path = "."]
mod tests_with_aws_lc_rs {
use super::*;
provider_aws_lc_rs!();
#[path = "../api.rs"]
mod tests;
}
// this must be outside tests_with_*, as we want
// one thread_local!, not one per provider.
thread_local!(static COUNTS: RefCell<LogCounts> = RefCell::new(LogCounts::new()));
struct CountingLogger;
#[allow(dead_code)]
static LOGGER: CountingLogger = CountingLogger;
#[allow(dead_code)]
impl CountingLogger {
fn install() {
let _ = log::set_logger(&LOGGER);
log::set_max_level(log::LevelFilter::Trace);
}
fn reset() {
COUNTS.with(|c| {
c.borrow_mut().reset();
});
}
}
impl log::Log for CountingLogger {
fn enabled(&self, _metadata: &log::Metadata) -> bool {
true
}
fn log(&self, record: &log::Record) {
println!("logging at {:?}: {:?}", record.level(), record.args());
COUNTS.with(|c| {
c.borrow_mut()
.add(record.level(), format!("{}", record.args()));
});
}
fn flush(&self) {}
}
#[derive(Default, Debug)]
struct LogCounts {
trace: Vec<String>,
debug: Vec<String>,
info: Vec<String>,
warn: Vec<String>,
error: Vec<String>,
}
impl LogCounts {
fn new() -> Self {
Self {
..Default::default()
}
}
fn reset(&mut self) {
*self = Self::new();
}
fn add(&mut self, level: log::Level, message: String) {
match level {
log::Level::Trace => &mut self.trace,
log::Level::Debug => &mut self.debug,
log::Level::Info => &mut self.info,
log::Level::Warn => &mut self.warn,
log::Level::Error => &mut self.error,
}
.push(message);
}
}
|