### Question:
ExampleMetadata implements ConnectorMetadata { @Override public Map<String, ColumnHandle> getColumnHandles(ConnectorSession session, ConnectorTableHandle tableHandle) { ExampleTableHandle exampleTableHandle = (ExampleTableHandle) tableHandle; ExampleTable table = exampleClient.getTable(exampleTableHandle.getSchemaName(), exampleTableHandle.getTableName()); if (table == null) { throw new TableNotFoundException(exampleTableHandle.toSchemaTableName()); } ImmutableMap.Builder<String, ColumnHandle> columnHandles = ImmutableMap.builder(); int index = 0; for (ColumnMetadata column : table.getColumnsMetadata()) { columnHandles.put(column.getName(), new ExampleColumnHandle(column.getName(), column.getType(), index)); index++; } return columnHandles.build(); } @Inject  ExampleMetadata(ExampleClient exampleClient); @Override List<String> listSchemaNames(ConnectorSession session); List<String> listSchemaNames(); @Override ExampleTableHandle getTableHandle(ConnectorSession session, SchemaTableName tableName); @Override ConnectorTableMetadata getTableMetadata(ConnectorSession session, ConnectorTableHandle table); @Override List<SchemaTableName> listTables(ConnectorSession session, Optional<String> optionalSchemaName); @Override Map<String, ColumnHandle> getColumnHandles(ConnectorSession session, ConnectorTableHandle tableHandle); @Override Map<SchemaTableName, List<ColumnMetadata>> listTableColumns(ConnectorSession session, SchemaTablePrefix prefix); @Override ColumnMetadata getColumnMetadata(ConnectorSession session, ConnectorTableHandle tableHandle, ColumnHandle columnHandle); @Override boolean usesLegacyTableLayouts(); @Override ConnectorTableProperties getTableProperties(ConnectorSession session, ConnectorTableHandle table);  }### Answer:
@Test public void testGetColumnHandles() { assertEquals(metadata.getColumnHandles(SESSION, NUMBERS_TABLE_HANDLE), ImmutableMap.of( "text", new ExampleColumnHandle("text", createUnboundedVarcharType(), 0), "value", new ExampleColumnHandle("value", BIGINT, 1))); try { metadata.getColumnHandles(SESSION, new ExampleTableHandle("unknown", "unknown")); fail("Expected getColumnHandle of unknown table to throw a TableNotFoundException"); } catch (TableNotFoundException expected) { } try { metadata.getColumnHandles(SESSION, new ExampleTableHandle("example", "unknown")); fail("Expected getColumnHandle of unknown table to throw a TableNotFoundException"); } catch (TableNotFoundException expected) { } }