382 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			382 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			Factor
		
	
	
! Copyright (C) 2014 Doug Coleman.
 | 
						|
! See http://factorcode.org/license.txt for BSD license.
 | 
						|
USING: accessors alien.strings arrays forestdb.lib forestdb.utils kernel
 | 
						|
make multiline sequences tools.test ;
 | 
						|
IN: forestdb.lib.tests
 | 
						|
 | 
						|
! Get/set by key/value
 | 
						|
{ "val123" } [
 | 
						|
    [
 | 
						|
        "test123" [
 | 
						|
            "key123" "val123" fdb-set-kv
 | 
						|
            "key123" fdb-get-kv
 | 
						|
        ] with-kvs-name
 | 
						|
    ] with-forestdb-test-manual
 | 
						|
] unit-test
 | 
						|
 | 
						|
{ "val12345" } [
 | 
						|
    [
 | 
						|
        "test123" [
 | 
						|
            "key123" "val12345" fdb-set-kv
 | 
						|
            "key123" fdb-get-kv
 | 
						|
        ] with-kvs-name
 | 
						|
    ] with-forestdb-test-manual
 | 
						|
] unit-test
 | 
						|
 | 
						|
! Get
 | 
						|
 | 
						|
{
 | 
						|
    { "key1" "val" }
 | 
						|
} [
 | 
						|
    [
 | 
						|
        5 set-kv-n
 | 
						|
        fdb-commit-normal
 | 
						|
        "key1" "meta" "val" [
 | 
						|
            fdb_doc>doc [ key>> ] [ body>> ] bi 2array
 | 
						|
        ] with-create-doc
 | 
						|
    ] with-forestdb-test-manual
 | 
						|
] unit-test
 | 
						|
 | 
						|
 | 
						|
{
 | 
						|
    { "key1" f "val1" }
 | 
						|
} [
 | 
						|
    [
 | 
						|
        5 set-kv-n
 | 
						|
        fdb-commit-normal
 | 
						|
        "key1" "no meta" "going away" [
 | 
						|
            fdb-get
 | 
						|
            fdb_doc>doc [ key>> ] [ meta>> ] [ body>> ] tri 3array
 | 
						|
        ] with-create-doc
 | 
						|
    ] with-forestdb-test-manual
 | 
						|
] unit-test
 | 
						|
 | 
						|
 | 
						|
{
 | 
						|
    { "key2" f "val2" }
 | 
						|
} [
 | 
						|
    [
 | 
						|
        5 set-kv-n
 | 
						|
        fdb-commit-normal
 | 
						|
        2 <seqnum-doc> [
 | 
						|
            fdb-get-byseq fdb_doc>doc
 | 
						|
            [ key>> ] [ meta>> ] [ body>> ] tri 3array
 | 
						|
        ] with-doc
 | 
						|
    ] with-forestdb-test-manual
 | 
						|
] unit-test
 | 
						|
 | 
						|
{
 | 
						|
    { "key2" f "val2" }
 | 
						|
} [
 | 
						|
    [
 | 
						|
        5 set-kv-n
 | 
						|
        fdb-commit-normal
 | 
						|
        2 <seqnum-doc> [
 | 
						|
            fdb-get-byseq fdb_doc>doc
 | 
						|
            [ key>> ] [ meta>> ] [ body>> ] tri 3array
 | 
						|
        ] with-doc
 | 
						|
    ] with-forestdb-test-manual
 | 
						|
] unit-test
 | 
						|
 | 
						|
! Filename is only valid inside with-forestdb
 | 
						|
{ f } [
 | 
						|
    [
 | 
						|
        fdb-get-info filename>> alien>native-string empty?
 | 
						|
    ] with-forestdb-test-manual
 | 
						|
] unit-test
 | 
						|
 | 
						|
! Test fdb_doc_create
 | 
						|
{ 6 9 9 } [
 | 
						|
    [
 | 
						|
       "key123" "meta blah" "some body" [
 | 
						|
            [ keylen>> ] [ metalen>> ] [ bodylen>> ] tri
 | 
						|
        ] with-create-doc
 | 
						|
    ] with-forestdb-test-manual
 | 
						|
] unit-test
 | 
						|
 | 
						|
{ 7 8 15 } [
 | 
						|
    [
 | 
						|
       "key1234" "meta blah" "some body" [
 | 
						|
            [ "new meta" "some other body" fdb-doc-update ]
 | 
						|
            [ [ keylen>> ] [ metalen>> ] [ bodylen>> ] tri ] bi
 | 
						|
        ] with-create-doc
 | 
						|
    ] with-forestdb-test-manual
 | 
						|
] unit-test
 | 
						|
 | 
						|
{ 1 1 } [
 | 
						|
    [
 | 
						|
        1 set-kv-n
 | 
						|
        fdb-commit-normal
 | 
						|
        fdb-get-kvs-info [ last_seqnum>> ] [ doc_count>> ] bi
 | 
						|
    ] with-forestdb-test-manual
 | 
						|
] unit-test
 | 
						|
 | 
						|
{ 6 5 } [
 | 
						|
    [
 | 
						|
        5 set-kv-n
 | 
						|
        5 set-kv-nth
 | 
						|
        fdb-commit-normal
 | 
						|
        fdb-get-kvs-info [ last_seqnum>> ] [ doc_count>> ] bi
 | 
						|
    ] with-forestdb-test-manual
 | 
						|
] unit-test
 | 
						|
 | 
						|
{ 5 5 } [
 | 
						|
    [
 | 
						|
        5 set-kv-n
 | 
						|
        fdb-commit-normal
 | 
						|
        fdb-get-kvs-info [ last_seqnum>> ] [ doc_count>> ] bi
 | 
						|
    ] with-forestdb-test-manual
 | 
						|
] unit-test
 | 
						|
 | 
						|
! Snapshots
 | 
						|
 | 
						|
/*
 | 
						|
{ 5 5 } [
 | 
						|
    [
 | 
						|
        5 set-kv-n
 | 
						|
        fdb-commit-normal
 | 
						|
        FDB_SNAPSHOT_INMEM [
 | 
						|
            fdb-get-kvs-info [ last_seqnum>> ] [ doc_count>> ] bi
 | 
						|
        ] with-forestdb-snapshot
 | 
						|
    ] with-forestdb-test-manual
 | 
						|
] unit-test
 | 
						|
*/
 | 
						|
 | 
						|
 | 
						|
/*
 | 
						|
! Snapshots can only occur on commits. If you commit five keys at once,
 | 
						|
! and then try to open a snapshot on the second key, it should fail.
 | 
						|
 | 
						|
! XXX: Buggy, fails in _fdb_open with FDB_RESULT_NO_DB_INSTANCE
 | 
						|
[
 | 
						|
    delete-test-db-1
 | 
						|
    test-db-1 [
 | 
						|
        5 set-kv-n
 | 
						|
        fdb-commit-normal
 | 
						|
        FDB_SNAPSHOT_INMEM [
 | 
						|
            fdb-get-kvs-info [ last_seqnum>> ] [ doc_count>> ] bi
 | 
						|
        ] with-forestdb-snapshot
 | 
						|
    ] with-forestdb-tester
 | 
						|
] [
 | 
						|
    T{ fdb-error { error FDB_RESULT_NO_DB_INSTANCE } } =
 | 
						|
] must-fail-with
 | 
						|
 | 
						|
! Test that we take two snapshots and their seqnums/doc counts are right.
 | 
						|
! XXX: Buggy, want to see the first snapshot's document count at 5 too
 | 
						|
{
 | 
						|
    { 7 7 }
 | 
						|
    { 7 7 }
 | 
						|
} [
 | 
						|
    delete-test-db-1
 | 
						|
    test-db-1 [
 | 
						|
        5 set-kv-n
 | 
						|
        fdb-commit-normal
 | 
						|
 | 
						|
        6 7 set-kv-range
 | 
						|
        fdb-commit-normal
 | 
						|
 | 
						|
        FDB_SNAPSHOT_INMEM [
 | 
						|
            fdb-get-kvs-info [ last_seqnum>> ] [ doc_count>> ] bi 2array
 | 
						|
        ] with-forestdb-snapshot
 | 
						|
 | 
						|
        FDB_SNAPSHOT_INMEM [
 | 
						|
            fdb-get-kvs-info [ last_seqnum>> ] [ doc_count>> ] bi 2array
 | 
						|
        ] with-forestdb-snapshot
 | 
						|
    ] with-forestdb-tester
 | 
						|
] unit-test
 | 
						|
 | 
						|
 | 
						|
! Same test as above, but with buggy behavior for now so it passes
 | 
						|
{
 | 
						|
    7
 | 
						|
    7
 | 
						|
} [
 | 
						|
    delete-test-db-1
 | 
						|
    test-db-1 [
 | 
						|
        5 set-kv-n
 | 
						|
        fdb-commit-normal
 | 
						|
 | 
						|
        6 7 set-kv-range
 | 
						|
        fdb-commit-normal
 | 
						|
 | 
						|
        FDB_SNAPSHOT_INMEM [
 | 
						|
            fdb-get-kvs-info last_seqnum>>
 | 
						|
        ] with-forestdb-snapshot
 | 
						|
 | 
						|
        FDB_SNAPSHOT_INMEM [
 | 
						|
            fdb-get-kvs-info last_seqnum>>
 | 
						|
        ] with-forestdb-snapshot
 | 
						|
    ] with-forestdb-tester
 | 
						|
] unit-test
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
! Rollback test
 | 
						|
! Make sure the doc_count is correct after a rollback
 | 
						|
{
 | 
						|
    7
 | 
						|
    { 5 5 }
 | 
						|
} [
 | 
						|
    delete-test-db-1
 | 
						|
    test-db-1 [
 | 
						|
        5 set-kv-n
 | 
						|
        fdb-commit-normal
 | 
						|
 | 
						|
        6 7 set-kv-range
 | 
						|
        fdb-commit-normal
 | 
						|
 | 
						|
        FDB_SNAPSHOT_INMEM [
 | 
						|
            fdb-get-kvs-info last_seqnum>>
 | 
						|
        ] with-forestdb-snapshot
 | 
						|
 | 
						|
        5 fdb-rollback
 | 
						|
 | 
						|
        FDB_SNAPSHOT_INMEM [
 | 
						|
            fdb-get-kvs-info [ last_seqnum>> ] [ doc_count>> ] bi 2array
 | 
						|
        ] with-forestdb-snapshot
 | 
						|
    ] with-forestdb-tester
 | 
						|
] unit-test
 | 
						|
 | 
						|
*/
 | 
						|
 | 
						|
 | 
						|
! Iterators test
 | 
						|
! No matching keys
 | 
						|
{
 | 
						|
    { }
 | 
						|
} [
 | 
						|
    [
 | 
						|
        5 set-kv-n
 | 
						|
        fdb-commit-normal
 | 
						|
        [
 | 
						|
            "omg" "nada" [
 | 
						|
                  fdb_doc>doc [ seqnum>> ] [ key>> ] [ body>> ] tri 3array ,
 | 
						|
            ] with-fdb-normal-iterator
 | 
						|
        ] { } make
 | 
						|
    ] with-forestdb-test-manual
 | 
						|
] unit-test
 | 
						|
 | 
						|
! All the keys
 | 
						|
{
 | 
						|
    {
 | 
						|
        { 1 "key1" "val1" }
 | 
						|
        { 2 "key2" "val2" }
 | 
						|
        { 3 "key3" "val3" }
 | 
						|
        { 4 "key4" "val4" }
 | 
						|
        { 5 "key5" "val5" }
 | 
						|
    }
 | 
						|
} [
 | 
						|
    [
 | 
						|
        5 set-kv-n
 | 
						|
        fdb-commit-normal
 | 
						|
        [
 | 
						|
            "key1" "key5" [
 | 
						|
                  fdb_doc>doc [ seqnum>> ] [ key>> ] [ body>> ] tri 3array ,
 | 
						|
            ] with-fdb-normal-iterator
 | 
						|
        ] { } make
 | 
						|
    ] with-forestdb-test-manual
 | 
						|
] unit-test
 | 
						|
 | 
						|
! Test that keys at extremes get returned
 | 
						|
{
 | 
						|
    {
 | 
						|
        { 1 "key1" "val1" }
 | 
						|
    }
 | 
						|
} [
 | 
						|
    [
 | 
						|
        5 set-kv-n
 | 
						|
        fdb-commit-normal
 | 
						|
        [
 | 
						|
            "key0" "key1" [
 | 
						|
                  fdb_doc>doc [ seqnum>> ] [ key>> ] [ body>> ] tri 3array ,
 | 
						|
            ] with-fdb-normal-iterator
 | 
						|
        ] { } make
 | 
						|
    ] with-forestdb-test-manual
 | 
						|
] unit-test
 | 
						|
 | 
						|
{
 | 
						|
    {
 | 
						|
        { 5 "key5" "val5" }
 | 
						|
    }
 | 
						|
} [
 | 
						|
    [
 | 
						|
        5 set-kv-n
 | 
						|
        fdb-commit-normal
 | 
						|
        [
 | 
						|
            "key5" "key9" [
 | 
						|
                  fdb_doc>doc [ seqnum>> ] [ key>> ] [ body>> ] tri 3array ,
 | 
						|
            ] with-fdb-normal-iterator
 | 
						|
        ] { } make
 | 
						|
    ] with-forestdb-test-manual
 | 
						|
] unit-test
 | 
						|
 | 
						|
 | 
						|
! Test byseq mapping
 | 
						|
{
 | 
						|
    V{ 1 2 3 4 5 }
 | 
						|
} [
 | 
						|
    [
 | 
						|
        5 set-kv-n
 | 
						|
        fdb-commit-normal
 | 
						|
        0 10 [
 | 
						|
            fdb_doc>doc
 | 
						|
        ] with-fdb-byseq-map
 | 
						|
        [ seqnum>> ] map
 | 
						|
    ] with-forestdb-test-manual
 | 
						|
] unit-test
 | 
						|
 | 
						|
! XXX: Behavior changed here
 | 
						|
! No longer makes new docs that are deleted
 | 
						|
! Deleting 5 keys gives you 5 new seqnums that are those docs, but deleted
 | 
						|
! {
 | 
						|
    ! V{ { 6 t } { 7 t } { 8 t } { 9 t } { 10 t } }
 | 
						|
! } [
 | 
						|
    ! [
 | 
						|
        ! 5 set-kv-n
 | 
						|
        ! 5 del-kv-n
 | 
						|
        ! fdb-commit-normal
 | 
						|
        ! 0 10 [
 | 
						|
            ! fdb_doc>doc
 | 
						|
        ! ] with-fdb-byseq-map
 | 
						|
        ! [ [ seqnum>> ] [ deleted?>> ] bi 2array ] map
 | 
						|
    ! ] with-forestdb-test-manual
 | 
						|
! ] unit-test
 | 
						|
 | 
						|
! Test new behavior
 | 
						|
{
 | 
						|
    V{ }
 | 
						|
} [
 | 
						|
    [
 | 
						|
        5 set-kv-n
 | 
						|
        5 del-kv-n
 | 
						|
        fdb-commit-normal
 | 
						|
        0 10 [
 | 
						|
            fdb_doc>doc
 | 
						|
        ] with-fdb-byseq-map
 | 
						|
        [ [ seqnum>> ] [ deleted?>> ] bi 2array ] map
 | 
						|
    ] with-forestdb-test-manual
 | 
						|
] unit-test
 | 
						|
 | 
						|
{
 | 
						|
    {
 | 
						|
        { 1 "key1" }
 | 
						|
        { 2 "key2" }
 | 
						|
        { 3 "key3" }
 | 
						|
        { 4 "key4" }
 | 
						|
        { 5 "key5" }
 | 
						|
    }
 | 
						|
}
 | 
						|
[
 | 
						|
    [
 | 
						|
        5 set-kv-n
 | 
						|
        fdb-commit-normal
 | 
						|
        [
 | 
						|
           0 10 [
 | 
						|
                [ seqnum>> ]
 | 
						|
                [ [ key>> ] [ keylen>> ] bi alien/length>string ] bi 2array ,
 | 
						|
            ] with-fdb-byseq-each
 | 
						|
        ] { } make
 | 
						|
    ] with-forestdb-test-manual
 | 
						|
] unit-test
 |