@ -8,6 +8,7 @@ import (
"fmt"
"fmt"
"os"
"os"
"path/filepath"
"path/filepath"
"sync"
"testing"
"testing"
"time"
"time"
@ -620,6 +621,14 @@ func (c *compactingChonkFake) PurgeAUMs(hashes []AUMHash) error {
return nil
return nil
}
}
// Avoid go vet complaining about copying a lock value
func cloneMem ( src , dst * Mem ) {
dst . l = sync . RWMutex { }
dst . aums = src . aums
dst . parentIndex = src . parentIndex
dst . lastActiveAncestor = src . lastActiveAncestor
}
func TestCompact ( t * testing . T ) {
func TestCompact ( t * testing . T ) {
fakeState := & State {
fakeState := & State {
Keys : [ ] Key { { Kind : Key25519 , Votes : 1 } } ,
Keys : [ ] Key { { Kind : Key25519 , Votes : 1 } } ,
@ -661,12 +670,13 @@ func TestCompact(t *testing.T) {
` , optTemplate ( "checkpoint" , AUM { MessageKind : AUMCheckpoint , State : fakeState } ) )
` , optTemplate ( "checkpoint" , AUM { MessageKind : AUMCheckpoint , State : fakeState } ) )
storage := & compactingChonkFake {
storage := & compactingChonkFake {
Mem : ( * c . Chonk ( ) . ( * Mem ) ) ,
aumAge : map [ AUMHash ] time . Time { ( c . AUMHashes [ "F1" ] ) : time . Now ( ) } ,
aumAge : map [ AUMHash ] time . Time { ( c . AUMHashes [ "F1" ] ) : time . Now ( ) } ,
t : t ,
t : t ,
wantDelete : [ ] AUMHash { c . AUMHashes [ "A" ] , c . AUMHashes [ "B" ] , c . AUMHashes [ "OLD" ] } ,
wantDelete : [ ] AUMHash { c . AUMHashes [ "A" ] , c . AUMHashes [ "B" ] , c . AUMHashes [ "OLD" ] } ,
}
}
cloneMem ( c . Chonk ( ) . ( * Mem ) , & storage . Mem )
lastActiveAncestor , err := Compact ( storage , c . AUMHashes [ "H" ] , CompactionOptions { MinChain : 2 , MinAge : time . Hour } )
lastActiveAncestor , err := Compact ( storage , c . AUMHashes [ "H" ] , CompactionOptions { MinChain : 2 , MinAge : time . Hour } )
if err != nil {
if err != nil {
t . Errorf ( "Compact() failed: %v" , err )
t . Errorf ( "Compact() failed: %v" , err )