@@ -11,6 +11,7 @@ import (
1111 "crypto/x509"
1212 "crypto/x509/pkix"
1313 "encoding/base64"
14+ "encoding/json"
1415 "encoding/pem"
1516 "errors"
1617 "fmt"
@@ -1172,7 +1173,7 @@ var _ = Describe("AppConfiguationProvider Get All Settings", func() {
11721173 Expect (err ).Should (BeNil ())
11731174 Expect (len (allSettings .ConfigMapSettings )).Should (Equal (1 ))
11741175 Expect (allSettings .ConfigMapSettings ["settings.json" ]).Should (
1175- Equal ("{\" feature_management\" :{\" feature_flags\" :[{\" allocation\" :{\" default_when_disabled\" :\" Off\" ,\" default_when_enabled\" :\" Off\" ,\" percentile\" :[{\" from\" :0,\" to\" :100,\" variant\" :\" Off\" }]},\" description\" :\" \" ,\" enabled\" :false,\" id\" :\" Telemetry_2\" ,\" telemetry\" :{\" enabled\" :true,\" metadata\" :{\" ETag\" :\" fakeETag\" ,\" FeatureFlagId\" :\" Rc8Am7HIGDT7HC5Ovs3wKN_aGaaK_Uz1mH2e11gaK0o\" ,\" FeatureFlagReference\" :\" /kv/.appconfig.featureflag/Telemetry_2?label=Test\" }},\" variants\" :[{\" configuration_value\" :false,\" name\" :\" Off\" },{\" configuration_value\" :true,\" name\" :\" On\" }]}]}}" ))
1176+ Equal ("{\" feature_management\" :{\" feature_flags\" :[{\" allocation\" :{\" default_when_disabled\" :\" Off\" ,\" default_when_enabled\" :\" Off\" ,\" percentile\" :[{\" from\" :0,\" to\" :100,\" variant\" :\" Off\" }]},\" description\" :\" \" ,\" enabled\" :false,\" id\" :\" Telemetry_2\" ,\" telemetry\" :{\" enabled\" :true,\" metadata\" :{\" AllocationId \" : \" 5QQaU_fROjgJ3gjG0sVe \" , \" ETag\" :\" fakeETag\" ,\" FeatureFlagId\" :\" Rc8Am7HIGDT7HC5Ovs3wKN_aGaaK_Uz1mH2e11gaK0o\" ,\" FeatureFlagReference\" :\" /kv/.appconfig.featureflag/Telemetry_2?label=Test\" }},\" variants\" :[{\" configuration_value\" :false,\" name\" :\" Off\" },{\" configuration_value\" :true,\" name\" :\" On\" }]}]}}" ))
11761177 })
11771178
11781179 It ("Fail to get all configuration settings" , func () {
@@ -1490,6 +1491,126 @@ func TestFeatureFlagId(t *testing.T) {
14901491 assert .Equal (t , "Rc8Am7HIGDT7HC5Ovs3wKN_aGaaK_Uz1mH2e11gaK0o" , calculatedId2 )
14911492}
14921493
1494+ func TestAllocationId (t * testing.T ) {
1495+ var featureFlag1 map [string ]interface {}
1496+ NoPercentileAndSeed := `{
1497+ "enabled": true,
1498+ "telemetry": { "enabled": true },
1499+ "variants": [ { "name": "Control" }, { "name": "Test" } ],
1500+ "allocation": {
1501+ "default_when_disabled": "Control",
1502+ "user": [ {"users": ["Jeff"], "variant": "Test"} ]
1503+ }
1504+ }`
1505+ _ = json .Unmarshal ([]byte (NoPercentileAndSeed ), & featureFlag1 )
1506+ allocationId1 := generateAllocationId (featureFlag1 )
1507+ assert .Equal (t , "" , allocationId1 )
1508+
1509+ var featureFlag2 map [string ]interface {}
1510+ SeedOnly := `{
1511+ "enabled": true,
1512+ "telemetry": { "enabled": true },
1513+ "variants": [ { "name": "Control" }, { "name": "Test" } ],
1514+ "allocation": {
1515+ "default_when_disabled": "Control",
1516+ "user": [ {"users": ["Jeff"], "variant": "Test"} ],
1517+ "seed": "123"
1518+ }
1519+ }`
1520+ _ = json .Unmarshal ([]byte (SeedOnly ), & featureFlag2 )
1521+ allocationId2 := generateAllocationId (featureFlag2 )
1522+ assert .Equal (t , "qZApcKdfXscxpgn_8CMf" , allocationId2 )
1523+
1524+ var featureFlag3 map [string ]interface {}
1525+ DefaultWhenEnabledOnly := `{
1526+ "enabled": true,
1527+ "telemetry": { "enabled": true },
1528+ "variants": [ { "name": "Control" }, { "name": "Test" } ],
1529+ "allocation": {
1530+ "default_when_enabled": "Control"
1531+ }
1532+ }`
1533+ _ = json .Unmarshal ([]byte (DefaultWhenEnabledOnly ), & featureFlag3 )
1534+ allocationId3 := generateAllocationId (featureFlag3 )
1535+ assert .Equal (t , "k486zJjud_HkKaL1C4qB" , allocationId3 )
1536+
1537+ var featureFlag4 map [string ]interface {}
1538+ PercentileOnly := `{
1539+ "enabled": true,
1540+ "telemetry": { "enabled": true },
1541+ "variants": [ ],
1542+ "allocation": {
1543+ "percentile": [ { "from": 0, "to": 50, "variant": "Control" }, { "from": 50, "to": 100, "variant": "Test" } ]
1544+ }
1545+ }`
1546+ _ = json .Unmarshal ([]byte (PercentileOnly ), & featureFlag4 )
1547+ allocationId4 := generateAllocationId (featureFlag4 )
1548+ assert .Equal (t , "5YUbmP0P5s47zagO_LvI" , allocationId4 )
1549+
1550+ var featureFlag5 map [string ]interface {}
1551+ SimpleConfigurationValue := `{
1552+ "enabled": true,
1553+ "telemetry": { "enabled": true },
1554+ "variants": [ { "name": "Control", "configuration_value": "standard" }, { "name": "Test", "configuration_value": "special" } ],
1555+ "allocation": {
1556+ "default_when_enabled": "Control",
1557+ "percentile": [ { "from": 0, "to": 50, "variant": "Control" }, { "from": 50, "to": 100, "variant": "Test" } ],
1558+ "seed": "123"
1559+ }
1560+ }`
1561+ _ = json .Unmarshal ([]byte (SimpleConfigurationValue ), & featureFlag5 )
1562+ allocationId5 := generateAllocationId (featureFlag5 )
1563+ assert .Equal (t , "QIOEOTQJr2AXo4dkFFqy" , allocationId5 )
1564+
1565+ var featureFlag6 map [string ]interface {}
1566+ ComplexConfigurationValue := `{
1567+ "enabled": true,
1568+ "telemetry": { "enabled": true },
1569+ "variants": [ { "name": "Control", "configuration_value": { "title": { "size": 100, "color": "red" }, "options": [ 1, 2, 3 ]} }, { "name": "Test", "configuration_value": { "title": { "size": 200, "color": "blue" }, "options": [ "1", "2", "3" ]} } ],
1570+ "allocation": {
1571+ "default_when_enabled": "Control",
1572+ "percentile": [ { "from": 0, "to": 50, "variant": "Control" }, { "from": 50, "to": 100, "variant": "Test" } ],
1573+ "seed": "123"
1574+ }
1575+ }`
1576+ _ = json .Unmarshal ([]byte (ComplexConfigurationValue ), & featureFlag6 )
1577+ allocationId6 := generateAllocationId (featureFlag6 )
1578+ assert .Equal (t , "4Bes0AlwuO8kYX-YkBWs" , allocationId6 )
1579+
1580+ var featureFlag7 map [string ]interface {}
1581+ TelemetryVariantPercentile := `{
1582+ "enabled": true,
1583+ "telemetry": { "enabled": true },
1584+ "variants": [
1585+ {
1586+ "name": "True_Override",
1587+ "configuration_value": {
1588+ "someOtherKey": {
1589+ "someSubKey": "someSubValue"
1590+ },
1591+ "someKey4": [3, 1, 4, true],
1592+ "someKey": "someValue",
1593+ "someKey3": 3.14,
1594+ "someKey2": 3
1595+ }
1596+ }
1597+ ],
1598+ "allocation": {
1599+ "default_when_enabled": "True_Override",
1600+ "percentile": [
1601+ {
1602+ "variant": "True_Override",
1603+ "from": 0,
1604+ "to": 100
1605+ }
1606+ ]
1607+ }
1608+ }`
1609+ _ = json .Unmarshal ([]byte (TelemetryVariantPercentile ), & featureFlag7 )
1610+ allocationId7 := generateAllocationId (featureFlag7 )
1611+ assert .Equal (t , "YsdJ4pQpmhYa8KEhRLUn" , allocationId7 )
1612+ }
1613+
14931614func TestCreateSecretClients (t * testing.T ) {
14941615 configProvider := & acpv1.AzureAppConfigurationProvider {
14951616 TypeMeta : metav1.TypeMeta {
0 commit comments