-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmemoria_test.go
95 lines (72 loc) · 2.13 KB
/
memoria_test.go
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
package memoria
import (
"testing"
"time"
)
func TestTiempoDeVidaMáximo(t *testing.T) {
var almacén = NuevoAlmacén(3*time.Second, 1*time.Second)
almacén.Almacenar("1", "objeto1")
var contador = 0
for {
time.Sleep(500 * time.Millisecond)
contador++
obj1, existe1 := almacén.Adquirir("1")
if contador == 6 {
// Transcurridos más de tres segundos
noDebeExistir(t, existe1, obj1)
break
} else {
debeExistir(t, existe1, obj1, "objeto1")
}
}
}
func TestTiempoDeVidaSinUso(t *testing.T) {
var almacén = NuevoAlmacén(3*time.Second, 1*time.Second)
almacén.Almacenar("1", "objeto1")
almacén.Almacenar("2", "objeto2")
time.Sleep(800 * time.Millisecond)
obj1, existe1 := almacén.Adquirir("1")
debeExistir(t, existe1, obj1, "objeto1")
// Esperar a que expire el «2».
// El «1» no debe expirar aún.
time.Sleep(300 * time.Millisecond)
obj1, existe1 = almacén.Adquirir("1")
debeExistir(t, existe1, obj1, "objeto1")
obj2, existe2 := almacén.Adquirir("2")
noDebeExistir(t, existe2, obj2)
// Esperar más de un segundo para que expire el restante
time.Sleep(1100 * time.Millisecond)
obj1, existe1 = almacén.Adquirir("1")
noDebeExistir(t, existe1, obj1)
}
func TestSobrescritura(t *testing.T) {
var almacén = NuevoAlmacén(3*time.Second, 1*time.Second)
almacén.Almacenar("I", "valor1")
time.Sleep(800 * time.Millisecond)
obj, existe := almacén.Adquirir("I")
debeExistir(t, existe, obj, "valor1")
time.Sleep(800 * time.Millisecond)
almacén.Almacenar("I", "valor2")
time.Sleep(800 * time.Millisecond)
obj, existe = almacén.Adquirir("I")
debeExistir(t, existe, obj, "valor2")
time.Sleep(1100 * time.Millisecond)
obj, existe = almacén.Adquirir("I")
noDebeExistir(t, existe, obj)
}
func debeExistir(t *testing.T, existe bool, objeto interface{}, valorEsperado string) {
if !existe {
t.Error("objeto no encontrado")
}
if objeto.(string) != valorEsperado {
t.Error("valor de objeto inesperado")
}
}
func noDebeExistir(t *testing.T, existe bool, objeto interface{}) {
if existe {
t.Error("objeto no expirado")
}
if objeto != nil {
t.Error("valor de objeto expirado no nulo")
}
}