Unit testing the resolver was: Optional service dependencies only
    Paul Sandoz 
    paul.sandoz at oracle.com
       
    Mon Jun 25 11:54:24 PDT 2012
    
    
  
On Jun 23, 2012, at 2:00 PM, Jaroslav Tulach wrote:
> Dne Pá 22. června 2012 19:39:27, Paul Sandoz napsal(a):
>> Hi,
>>> If you want to get rid of the NP-Complete problem, remove "requires
>>> service xyz" concept and allow only "requires service optional xyz".
>> As i said i am shoving the NP-Complete problem under the rug for now.
>> Forgive me!
> 
> Paul, are you looking only for comments to your webrev? If so, then I am sorry 
> for taking much larger perspective.
No need to apologize! I think that larger perspective has been quite informative and useful (in addition to also helping find a bug in configuration ordering :-) ).
> I don't want to stop you integrating your 
> change at all.
> 
No problem. Mostly what i am looking for is agreement that service provider module dependencies should be resolved after the "Classpath"  dependences since it is:
- easier to report errors;
- easier for developers to understand; and
- has wider implications to help avoid, in part, NP-Complete problems.
Would you consider the above a fair assessment?
> The more low level comment I can provide: Is there a way to write simple unit 
> test? For example what would be the simplest way to simulate the erroneous 
> resolution described at [1] when the b service provider can't be found easily?
> 
The closest thing in the current tests is the _Configurator.java located in jdk/test/org/openjdk/jigsaw e.g.:
        new Test("diamond", true, "x at 1") {
            void init(MockLibrary mlib) {
                mlib.add(module("x at 1").requires("y at 2").requires("w at 4"))
                    .add(module("y at 2").requires("z@>=3"))
                    .add(module("z at 9"))
                    .add(module("z at 4"))
                    .add(module("z at 3"))
                    .add(module("w at 4").requires("z@<=4"));
            }
            void ref(ConfigurationBuilder cfbd) {
                cfbd.add(context("x at 1").remote("+w", "+y"))
                    .add(context("y at 2").remote("+z"))
                    .add(context("z at 4"))
                    .add(context("w at 4").remote("+z"));
            }
        };
        new Test("diamond-fail", false, "x at 1") {
            void init(MockLibrary mlib) {
                mlib.add(module("x at 1").requires("y at 2").requires("w at 4"))
                    .add(module("y at 2").requires("z@<=3"))
                    .add(module("z at 4"))
                    .add(module("z at 3"))
                    .add(module("z at 9"))
                    .add(module("w at 4").requires("z@>=4"));
            }
        };
It encompasses the process of resolving and linking. IMHO it looks quite reasonable, although i wish we could use TestNG to help out a bit :-) anyway....  the module and configuration builders need to be updated to support services.
It could easily be adapted to perform just resolving and check the resolution result.
Paul.
> -jt
> 
> [1] http://wiki.apidesign.org/wiki/JigsawServices
> 
    
    
More information about the jigsaw-dev
mailing list