cgivre commented on code in PR #2549:
URL: https://github.com/apache/drill/pull/2549#discussion_r875447108
##########
contrib/udfs/src/test/java/org/apache/drill/exec/udfs/TestUserAgentFunctions.java:
##########
@@ -168,4 +241,185 @@ public void testEmptyUAString() throws Exception {
.baselineValues("Hacker")
.go();
}
+
+ @Test
+ public void testClientHints() throws Exception {
+ String query =
+ "SELECT " +
+ " t1.ua.DeviceClass AS DeviceClass,\n" +
+ " t1.ua.DeviceName AS DeviceName,\n" +
+ " t1.ua.DeviceBrand AS DeviceBrand,\n" +
+ " t1.ua.DeviceCpu AS DeviceCpu,\n" +
+ " t1.ua.DeviceCpuBits AS DeviceCpuBits,\n"
+
+ " t1.ua.OperatingSystemClass AS
OperatingSystemClass,\n" +
+ " t1.ua.OperatingSystemName AS
OperatingSystemName,\n" +
+ " t1.ua.OperatingSystemVersion AS
OperatingSystemVersion,\n" +
+ " t1.ua.OperatingSystemVersionMajor AS
OperatingSystemVersionMajor,\n" +
+ " t1.ua.OperatingSystemNameVersion AS
OperatingSystemNameVersion,\n" +
+ " t1.ua.OperatingSystemNameVersionMajor AS
OperatingSystemNameVersionMajor,\n" +
+ " t1.ua.LayoutEngineClass AS
LayoutEngineClass,\n" +
+ " t1.ua.LayoutEngineName AS
LayoutEngineName,\n" +
+ " t1.ua.LayoutEngineVersion AS
LayoutEngineVersion,\n" +
+ " t1.ua.LayoutEngineVersionMajor AS
LayoutEngineVersionMajor,\n" +
+ " t1.ua.LayoutEngineNameVersion AS
LayoutEngineNameVersion,\n" +
+ " t1.ua.LayoutEngineNameVersionMajor AS
LayoutEngineNameVersionMajor,\n" +
+ " t1.ua.AgentClass AS AgentClass,\n" +
+ " t1.ua.AgentName AS AgentName,\n" +
+ " t1.ua.AgentVersion AS AgentVersion,\n" +
+ " t1.ua.AgentVersionMajor AS
AgentVersionMajor,\n" +
+ " t1.ua.AgentNameVersion AS
AgentNameVersion,\n" +
+ " t1.ua.AgentNameVersionMajor AS
AgentNameVersionMajor\n" +
+ "FROM (" +
+ " SELECT" +
+ " parse_user_agent(" +
+ " 'User-Agent', 'Mozilla/5.0 (X11; Linux
x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127
Safari/537.36'," +
+ " 'Sec-Ch-Ua', '\" Not A;Brand\";v=\"99\",
\"Chromium\";v=\"100\", \"Google Chrome\";v=\"100\"'," +
+ " 'Sec-Ch-Ua-Arch', '\"x86\"'," +
+ " 'Sec-Ch-Ua-Bitness', '\"64\"'," +
+ " 'Sec-Ch-Ua-Full-Version', '\"100.0.4896.127\"'," +
+ " 'Sec-Ch-Ua-Full-Version-List', '\" Not
A;Brand\";v=\"99.0.0.0\", \"Chromium\";v=\"100.0.4896.127\", \"Google
Chrome\";v=\"100.0.4896.127\"'," +
+ " 'Sec-Ch-Ua-Mobile', '?0'," +
+ " 'Sec-Ch-Ua-Model', '\"\"'," +
+ " 'Sec-Ch-Ua-Platform', '\"Linux\"'," +
+ " 'Sec-Ch-Ua-Platform-Version', '\"5.13.0\"'," +
+ " 'Sec-Ch-Ua-Wow64', '?0'" +
+ " ) AS ua " +
+ " FROM (values(1))" +
+ ") AS t1";
+
+ testBuilder()
+ .sqlQuery(query)
+ .unOrdered()
+ .baselineRecords(
+ Collections.singletonList(// Singleton list because we expect 1 record
+ expectations(
+ "DeviceClass", "Desktop",
+ "DeviceName", "Linux Desktop",
+ "DeviceBrand", "Unknown",
+ "DeviceCpu", "Intel x86_64",
+ "DeviceCpuBits", "64",
+ "OperatingSystemClass", "Desktop",
+ "OperatingSystemName", "Linux",
+ "OperatingSystemVersion", "5.13.0",
+ "OperatingSystemVersionMajor", "5",
+ "OperatingSystemNameVersion", "Linux 5.13.0",
+ "OperatingSystemNameVersionMajor", "Linux 5",
+ "LayoutEngineClass", "Browser",
+ "LayoutEngineName", "Blink",
+ "LayoutEngineVersion", "100.0",
+ "LayoutEngineVersionMajor", "100",
+ "LayoutEngineNameVersion", "Blink 100.0",
+ "LayoutEngineNameVersionMajor", "Blink 100",
+ "AgentClass", "Browser",
+ "AgentName", "Chrome",
+ "AgentVersion", "100.0.4896.127",
+ "AgentVersionMajor", "100",
+ "AgentNameVersion", "Chrome 100.0.4896.127",
+ "AgentNameVersionMajor", "Chrome 100"
+ )
+ )
+ )
+ .go();
+ }
+
+ // ====================================================================
+
+ @Test
+ public void testEmptyClientHints() throws Exception {
+ String query =
+ "SELECT " +
+ " t1.ua.DeviceClass AS DeviceClass,\n" +
+ " t1.ua.DeviceName AS DeviceName,\n" +
+ " t1.ua.DeviceBrand AS DeviceBrand,\n" +
+ " t1.ua.DeviceCpu AS DeviceCpu,\n" +
+ " t1.ua.DeviceCpuBits AS DeviceCpuBits,\n"
+
+ " t1.ua.OperatingSystemClass AS
OperatingSystemClass,\n" +
+ " t1.ua.OperatingSystemName AS
OperatingSystemName,\n" +
+ " t1.ua.OperatingSystemVersion AS
OperatingSystemVersion,\n" +
+ " t1.ua.OperatingSystemVersionMajor AS
OperatingSystemVersionMajor,\n" +
+ " t1.ua.OperatingSystemNameVersion AS
OperatingSystemNameVersion,\n" +
+ " t1.ua.OperatingSystemNameVersionMajor AS
OperatingSystemNameVersionMajor,\n" +
+ " t1.ua.LayoutEngineClass AS
LayoutEngineClass,\n" +
+ " t1.ua.LayoutEngineName AS
LayoutEngineName,\n" +
+ " t1.ua.LayoutEngineVersion AS
LayoutEngineVersion,\n" +
+ " t1.ua.LayoutEngineVersionMajor AS
LayoutEngineVersionMajor,\n" +
+ " t1.ua.LayoutEngineNameVersion AS
LayoutEngineNameVersion,\n" +
+ " t1.ua.LayoutEngineNameVersionMajor AS
LayoutEngineNameVersionMajor,\n" +
+ " t1.ua.AgentClass AS AgentClass,\n" +
+ " t1.ua.AgentName AS AgentName,\n" +
+ " t1.ua.AgentVersion AS AgentVersion,\n" +
+ " t1.ua.AgentVersionMajor AS
AgentVersionMajor,\n" +
+ " t1.ua.AgentNameVersion AS
AgentNameVersion,\n" +
+ " t1.ua.AgentNameVersionMajor AS
AgentNameVersionMajor\n" +
+ "FROM (" +
+ " SELECT" +
+ " parse_user_agent(" +
+ // NOTE: Here we do NOT say "User-Agent" --> It is just the first one in
the list.
+ " 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML,
like Gecko) Chrome/100.0.4896.127 Safari/537.36'," +
+ " 'Sec-Ch-Ua', ''," +
+ " 'Sec-Ch-Ua-Arch', ''," +
+ " 'Sec-Ch-Ua-Bitness', ''," +
+ " 'Sec-Ch-Ua-Full-Version', ''," +
+ " 'Sec-Ch-Ua-Full-Version-List', ''," +
+ " 'Sec-Ch-Ua-Mobile', ''," +
+ " 'Sec-Ch-Ua-Model', ''," +
+ " 'Sec-Ch-Ua-Platform', ''," +
+ " 'Sec-Ch-Ua-Platform-Version', ''," +
+ " 'Sec-Ch-Ua-Wow64', ''" +
+ " ) AS ua " +
+ " FROM (values(1))" +
+ ") AS t1";
+
+ testBuilder()
+ .sqlQuery(query)
+ .unOrdered()
+ .baselineRecords(
+ Collections.singletonList(// Singleton list because we expect 1 record
+ expectations(
+ "DeviceClass", "Desktop",
+ "DeviceName", "Linux Desktop",
+ "DeviceBrand", "Unknown",
+ "DeviceCpu", "Intel x86_64",
+ "DeviceCpuBits", "64",
+ "OperatingSystemClass", "Desktop",
+ "OperatingSystemName", "Linux",
+ "OperatingSystemVersion", "??",
+ "OperatingSystemVersionMajor", "??",
+ "OperatingSystemNameVersion", "Linux ??",
+ "OperatingSystemNameVersionMajor", "Linux ??",
+ "LayoutEngineClass", "Browser",
+ "LayoutEngineName", "Blink",
+ "LayoutEngineVersion", "100.0",
+ "LayoutEngineVersionMajor", "100",
+ "LayoutEngineNameVersion", "Blink 100.0",
+ "LayoutEngineNameVersionMajor", "Blink 100",
+ "AgentClass", "Browser",
+ "AgentName", "Chrome",
+ "AgentVersion", "100.0.4896.127",
+ "AgentVersionMajor", "100",
+ "AgentNameVersion", "Chrome 100.0.4896.127",
+ "AgentNameVersionMajor", "Chrome 100"
+ )
+ )
+ )
+ .go();
+ }
+
+ /**
+ * Converts a more readable list of keys and values into what the
ClusterTest supports.
+ * @param strings List of ["key", "value"]
+ * @return A Map of the same keys and values that is in the right format.
+ */
+ private Map<String, Object> expectations(String... strings) {
Review Comment:
This is a nice function.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]