protected String packagePath(PackageName packageName) {
        return packageName.toRestPath() + storage.dataPath();
    }
@Test
    public void testPackagePath() {
        PackagesManagementImpl impl = (PackagesManagementImpl) packagesManagement;
        PackageName pn = PackageName.get("function://public/default/test@v1");
        String metaPath = impl.metadataPath(pn);
        Assert.assertEquals(metaPath, "function/public/default/test/v1/meta");
        String dataPath = impl.packagePath(pn);
        Assert.assertEquals(dataPath, "function/public/default/test/v1");

        impl.initialize(new PackagesStorage() {
            @Override
            public void initialize() {

            }

            @Override
            public CompletableFuture<Void> writeAsync(String path, InputStream inputStream) {
                return null;
            }

            @Override
            public CompletableFuture<Void> readAsync(String path, OutputStream outputStream) {
                return null;
            }

            @Override
            public CompletableFuture<Void> deleteAsync(String path) {
                return null;
            }

            @Override
            public CompletableFuture<List<String>> listAsync(String path) {
                return null;
            }

            @Override
            public CompletableFuture<Boolean> existAsync(String path) {
                return null;
            }

            @Override
            public CompletableFuture<Void> closeAsync() {
                return null;
            }

            @Override
            public String dataPath() {
                return "/tmp";
            }
        });


        metaPath = impl.metadataPath(pn);
        Assert.assertEquals(metaPath, "function/public/default/test/v1/meta");
        dataPath = impl.packagePath(pn);
        Assert.assertEquals(dataPath, "function/public/default/test/v1/tmp");
    }