Hi Charles, Your workaround sounds right. In general, unit tests should make as few assumptions as possible about the system under test; they should focus on the one part of the system they want to exercise. (There is a large body of testing theory behind this statement...)
In your case, it may be that the contrib project that contains your UDFs is not a dependency of the contrib project with your format plugin. Nor should it be. We have a separate set of end-to-end tests which would be a great place to, say, make sure that all your UDFs work with all your format plugins. Unfortunately, these can't be run by developers; you'd need help from whoever currently owns the test framework. Thanks, - Paul On Friday, September 20, 2019, 09:50:54 AM PDT, Charles Givre <cgi...@gmail.com> wrote: Hey Paul, Thanks for your help. I should have clarified that the work I'm doing is for an ESRI Shape File plugin which is in contrib. The unit test in question calls a function which is in the contrib/udfs and I think you've pinpointed the issue. Unfortunately, running the test with maven produced the same error. I may just remove the unit test in question since the others pass, and this really doesn't have anything to do with the functionality of the code. -- C > On Sep 20, 2019, at 12:40 PM, Paul Rogers <par0...@yahoo.com.INVALID> wrote: > > Hi Charles, > > I seem to recall fighting with something similar in the past. The problem is > not with your setup; it is with how Drill finds your (custom?) UDF on the > classpath. > > My memory is hazy; but I think it had to do with the way that Drill uses the > drill-override.conf file to extend class path scanning, and how it finds the > UDF code. I think I banged on it until it worked, but I don't recall what I > did. > > Maybe I do remember. I think that, to run your code in the IDE, you need to > add the source code directory to your class path. (Recall that Drill needs > access to both function source and compiled code.) I think I modified my IDE > debug launch command to always include the proper sources. I don't have that > config in front of me; I'll check it this weekend to see if I can find the > exact item you must add. > > A workaround may be to run the test using Maven [1], since the Maven configs > will do the needed magic: > > cd exec/java-exec > mvn surefire:test -Dtest=YourTest > > > The other possibility is that you have your UDF in the "contrib" project, > while you are running unit tests in the "exec" project. Exec does not depend > on contrib, so contrib code is not visible to unit tests in Exec. The same is > true, by the way, for the us of the JDBC driver, since that is in the Maven > project after exec. > > Thanks, > - Paul > > [1] > https://maven.apache.org/surefire/maven-surefire-plugin/examples/single-test.html > > > > > On Friday, September 20, 2019, 07:44:55 AM PDT, Charles Givre ><cgi...@gmail.com> wrote: > > Hello Drillers, > I'm encountering a strange error in a unit test. The code is included below, > and it fails because when Drill attempts to execute the test, it cannot find > the function st_astext(). If I build Drill and execute the query in the CLI > it works, so I suspect there is some environment issue rather than a Drill > issue. Does anyone have any suggestions? > Thanks! > > > @BeforeClass > public static void setup() throws Exception { > startCluster(ClusterFixture.builder(dirTestWatcher)); > > DrillbitContext context = cluster.drillbit().getContext(); > FileSystemConfig original = (FileSystemConfig) >context.getStorage().getPlugin("cp").getConfig(); > Map<String, FormatPluginConfig> newFormats = new >HashMap<>(original.getFormats()); > newFormats.put("shp", new ShpFormatConfig()); > FileSystemConfig pluginConfig = new >FileSystemConfig(original.getConnection(), original.getConfig(), >original.getWorkspaces(), newFormats); > pluginConfig.setEnabled(true); > context.getStorage().createOrUpdate("cp", pluginConfig, true); > } > ... > > @Test > public void testShpQuery() throws Exception { > > testBuilder() > .sqlQuery("select gid, srid, shapeType, name, st_astext(geom) as wkt " > + "from cp.`CA-cities.shp` where gid = 100") > .ordered() > .baselineColumns("gid", "srid", "shapeType", "name", "wkt") > .baselineValues(100, 4326, "Point", "Jenny Lind", "POINT (-120.8699371 >38.0949216)") > .build() > .run(); > }