5
5
*/
6
6
package org .elasticsearch .xpack .vectors ;
7
7
8
+ import org .elasticsearch .Version ;
8
9
import org .elasticsearch .action .support .PlainActionFuture ;
10
+ import org .elasticsearch .cluster .ClusterName ;
11
+ import org .elasticsearch .cluster .ClusterState ;
12
+ import org .elasticsearch .cluster .metadata .IndexMetaData ;
13
+ import org .elasticsearch .cluster .metadata .MetaData ;
14
+ import org .elasticsearch .cluster .service .ClusterService ;
9
15
import org .elasticsearch .common .io .stream .BytesStreamOutput ;
10
16
import org .elasticsearch .common .settings .Settings ;
11
17
import org .elasticsearch .license .XPackLicenseState ;
12
18
import org .elasticsearch .test .ESTestCase ;
13
19
import org .elasticsearch .xpack .core .XPackFeatureSet ;
14
20
import org .elasticsearch .xpack .core .vectors .VectorsFeatureSetUsage ;
15
21
import org .junit .Before ;
22
+ import org .mockito .Mockito ;
16
23
17
- import static org .hamcrest .core .Is .is ;
18
24
import static org .mockito .Mockito .mock ;
19
25
import static org .mockito .Mockito .when ;
20
26
21
27
public class VectorsFeatureSetTests extends ESTestCase {
22
28
23
29
private XPackLicenseState licenseState ;
30
+ private ClusterService clusterService ;
24
31
25
32
@ Before
26
33
public void init () {
27
34
licenseState = mock (XPackLicenseState .class );
35
+ clusterService = mock (ClusterService .class );
28
36
}
29
37
30
38
public void testAvailable () throws Exception {
31
- VectorsFeatureSet featureSet = new VectorsFeatureSet (Settings .EMPTY , licenseState );
39
+ VectorsFeatureSet featureSet = new VectorsFeatureSet (Settings .EMPTY , licenseState , clusterService );
32
40
boolean available = randomBoolean ();
33
41
when (licenseState .isVectorsAllowed ()).thenReturn (available );
34
- assertThat ( featureSet . available (), is ( available ));
42
+ assertEquals ( available , featureSet . available ( ));
35
43
36
44
PlainActionFuture <XPackFeatureSet .Usage > future = new PlainActionFuture <>();
37
45
featureSet .usage (future );
38
46
XPackFeatureSet .Usage usage = future .get ();
39
- assertThat ( usage . available (), is ( available ));
47
+ assertEquals ( available , usage . available ( ));
40
48
41
49
BytesStreamOutput out = new BytesStreamOutput ();
42
50
usage .writeTo (out );
43
51
XPackFeatureSet .Usage serializedUsage = new VectorsFeatureSetUsage (out .bytes ().streamInput ());
44
- assertThat ( serializedUsage . available (), is ( available ));
52
+ assertEquals ( available , serializedUsage . available ( ));
45
53
}
46
54
47
55
public void testEnabled () throws Exception {
@@ -54,17 +62,48 @@ public void testEnabled() throws Exception {
54
62
} else {
55
63
settings .put ("xpack.vectors.enabled" , enabled );
56
64
}
57
- VectorsFeatureSet featureSet = new VectorsFeatureSet (settings .build (), licenseState );
58
- assertThat ( featureSet . enabled (), is ( enabled ));
65
+ VectorsFeatureSet featureSet = new VectorsFeatureSet (settings .build (), licenseState , clusterService );
66
+ assertEquals ( enabled , featureSet . enabled ( ));
59
67
PlainActionFuture <XPackFeatureSet .Usage > future = new PlainActionFuture <>();
60
68
featureSet .usage (future );
61
69
XPackFeatureSet .Usage usage = future .get ();
62
- assertThat ( usage . enabled (), is ( enabled ));
70
+ assertEquals ( enabled , usage . enabled ( ));
63
71
64
72
BytesStreamOutput out = new BytesStreamOutput ();
65
73
usage .writeTo (out );
66
74
XPackFeatureSet .Usage serializedUsage = new VectorsFeatureSetUsage (out .bytes ().streamInput ());
67
- assertThat ( serializedUsage . enabled (), is ( enabled ));
75
+ assertEquals ( enabled , serializedUsage . enabled ( ));
68
76
}
69
77
78
+ public void testUsageStats () throws Exception {
79
+ MetaData .Builder metaData = MetaData .builder ();
80
+ IndexMetaData .Builder index1 = IndexMetaData .builder ("test-index1" )
81
+ .settings (settings (Version .CURRENT )).numberOfShards (1 ).numberOfReplicas (0 )
82
+ .putMapping ("_doc" ,
83
+ "{\" properties\" :{\" my_dense_vector1\" :{\" type\" :\" dense_vector\" ,\" dims\" : 10}," +
84
+ "\" my_dense_vector2\" :{\" type\" :\" dense_vector\" ,\" dims\" : 30} }}" );
85
+ IndexMetaData .Builder index2 = IndexMetaData .builder ("test-index2" )
86
+ .settings (settings (Version .CURRENT )).numberOfShards (1 ).numberOfReplicas (0 )
87
+ .putMapping ("_doc" ,
88
+ "{\" properties\" :{\" my_dense_vector3\" :{\" type\" :\" dense_vector\" ,\" dims\" : 20}," +
89
+ "\" my_sparse_vector1\" :{\" type\" :\" sparse_vector\" } }}" );
90
+ metaData .put (index1 );
91
+ metaData .put (index2 );
92
+ ClusterState clusterState = ClusterState .builder (new ClusterName ("_testcluster" )).metaData (metaData ).build ();
93
+
94
+ Mockito .when (clusterService .state ()).thenReturn (clusterState );
95
+ when (licenseState .isVectorsAllowed ()).thenReturn (true );
96
+ Settings .Builder settings = Settings .builder ();
97
+ settings .put ("xpack.vectors.enabled" , true );
98
+
99
+ PlainActionFuture <XPackFeatureSet .Usage > future = new PlainActionFuture <>();
100
+ VectorsFeatureSet vectorsFeatureSet = new VectorsFeatureSet (settings .build (), licenseState , clusterService );
101
+ vectorsFeatureSet .usage (future );
102
+ VectorsFeatureSetUsage vectorUsage = (VectorsFeatureSetUsage ) future .get ();
103
+ assertEquals (true , vectorUsage .enabled ());
104
+ assertEquals (true , vectorUsage .available ());
105
+ assertEquals (3 , vectorUsage .numDenseVectorFields ());
106
+ assertEquals (1 , vectorUsage .numSparseVectorFields ());
107
+ assertEquals (20 , vectorUsage .avgDenseVectorDims ());
108
+ }
70
109
}
0 commit comments