@Override
    public List<String> listDbNames() {
        ImmutableList.Builder<String> builder = ImmutableList.builder();
        try {
            if (StringUtils.isNullOrEmpty(catalogOwner)) {
                SecurityManager sm = odps.projects().get().getSecurityManager();
                String result = sm.runQuery("whoami", false);
                JsonObject js = JsonParser.parseString(result).getAsJsonObject();
                catalogOwner = js.get("DisplayName").getAsString();
            }
            Iterator<Project> iterator = odps.projects().iterator(catalogOwner);
            while (iterator.hasNext()) {
                Project project = iterator.next();
                builder.add(project.getName());
            }
        } catch (OdpsException e) {
            e.printStackTrace();
            throw new StarRocksConnectorException("fail to list project names", e);
        }
        ImmutableList<String> databases = builder.build();
        if (databases.isEmpty()) {
            return ImmutableList.of(odps.getDefaultProject());
        }
        return databases;
    }
@Test
    public void testListDbNames() {
        List<String> expectedDbNames = Collections.singletonList("project");
        List<String> dbNames = odpsMetadata.listDbNames();
        Assert.assertEquals(dbNames, expectedDbNames);
    }