add a test
This commit is contained in:
parent
3ebfbf3342
commit
b8b3f066c4
@ -19,7 +19,7 @@
|
|||||||
//! are performed in temp sub-directories.
|
//! are performed in temp sub-directories.
|
||||||
|
|
||||||
use common::*;
|
use common::*;
|
||||||
use migration::{Config, SimpleMigration, Manager};
|
use migration::{Batch, Config, Error, SimpleMigration, Migration, Manager};
|
||||||
use kvdb::Database;
|
use kvdb::Database;
|
||||||
|
|
||||||
use devtools::RandomTempPath;
|
use devtools::RandomTempPath;
|
||||||
@ -62,11 +62,10 @@ impl SimpleMigration for Migration0 {
|
|||||||
|
|
||||||
fn version(&self) -> u32 { 1 }
|
fn version(&self) -> u32 { 1 }
|
||||||
|
|
||||||
fn simple_migrate(&mut self, key: Vec<u8>, value: Vec<u8>) -> Option<(Vec<u8>, Vec<u8>)> {
|
fn simple_migrate(&mut self, mut key: Vec<u8>, mut value: Vec<u8>) -> Option<(Vec<u8>, Vec<u8>)> {
|
||||||
let mut key = key;
|
|
||||||
key.push(0x11);
|
key.push(0x11);
|
||||||
let mut value = value;
|
|
||||||
value.push(0x22);
|
value.push(0x22);
|
||||||
|
|
||||||
Some((key, value))
|
Some((key, value))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -83,6 +82,31 @@ impl SimpleMigration for Migration1 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct AddsColumn;
|
||||||
|
|
||||||
|
impl Migration for AddsColumn {
|
||||||
|
fn pre_columns(&self) -> Option<u32> { None }
|
||||||
|
|
||||||
|
fn columns(&self) -> Option<u32> { Some(1) }
|
||||||
|
|
||||||
|
fn version(&self) -> u32 { 1 }
|
||||||
|
|
||||||
|
fn migrate(&mut self, source: &Database, config: &Config, dest: &mut Database, col: Option<u32>) -> Result<(), Error> {
|
||||||
|
let mut batch = Batch::new(config, col);
|
||||||
|
|
||||||
|
for (key, value) in source.iter(col) {
|
||||||
|
try!(batch.insert(key.to_vec(), value.to_vec(), dest));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if col == Some(1) {
|
||||||
|
try!(batch.insert(vec![1, 2, 3], vec![4, 5, 6], dest));
|
||||||
|
}
|
||||||
|
|
||||||
|
batch.commit(dest)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn one_simple_migration() {
|
fn one_simple_migration() {
|
||||||
let dir = RandomTempPath::create_dir();
|
let dir = RandomTempPath::create_dir();
|
||||||
@ -189,3 +213,16 @@ fn is_migration_needed() {
|
|||||||
assert!(manager.is_needed(1));
|
assert!(manager.is_needed(1));
|
||||||
assert!(!manager.is_needed(2));
|
assert!(!manager.is_needed(2));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn pre_columns() {
|
||||||
|
let mut manager = Manager::new(Config::default());
|
||||||
|
manager.add_migration(AddsColumn).unwrap();
|
||||||
|
|
||||||
|
let dir = RandomTempPath::create_dir();
|
||||||
|
let db_path = db_path(dir.as_path());
|
||||||
|
|
||||||
|
// this shouldn't fail to open the database even though it's one column
|
||||||
|
// short of the one before it.
|
||||||
|
manager.execute(&db_path, 0).unwrap();
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user