@Test void worksWithOldSchema(TestInfo testInfo) throws Exception {
    Version version = Schema.ensureVersion(session().getMetadata());
    String testSuffix = testSuffix(testInfo);
    Schema.applyCqlFile(version, storage.keyspace, session(), "/zipkin2-schema.cql");
    Schema.applyCqlFile(version, storage.keyspace, session(),
      "/zipkin2-schema-indexes-original.cql");

    // Ensure the storage component is functional before proceeding
    CheckResult check = storage.check();
    if (!check.ok()) {
      throw new AssertionError("Could not connect to storage: "
        + check.error().getMessage(), check.error());
    }

    List<Span> trace = newTrace(testSuffix);

    accept(trace);

    assertGetTraceReturns(trace.get(0).traceId(), trace);

    assertThat(storage.autocompleteTags().getValues("environment").execute())
      .isEmpty(); // instead of an exception
    String serviceName = trace.get(0).localServiceName();
    assertThat(storage.serviceAndSpanNames().getRemoteServiceNames(serviceName).execute())
      .isEmpty(); // instead of an exception

    QueryRequest request = requestBuilder()
      .serviceName(serviceName)
      .remoteServiceName(appendSuffix(BACKEND.serviceName(), testSuffix)).build();

    // Make sure there's an error if a query will return incorrectly vs returning invalid results
    assertThatThrownBy(() -> storage.spanStore().getTraces(request))
      .isInstanceOf(IllegalArgumentException.class)
      .hasMessage("remoteService=" + trace.get(1).remoteServiceName() +
        " unsupported due to missing table remote_service_by_service");
  }
This tests we don't accidentally rely on new indexes such as autocomplete tags
zipkin-storage/cassandra/src/test/java/zipkin2/storage/cassandra/ITEnsureSchema.java