• Patrick Ohly's avatar
    e2e: clarify and enhance configuration support · cf0dcc6a
    Patrick Ohly authored
    Storing settings in the framework's TestContext is not something that
    out-of-tree test authors can do because for them the framework is a
    read-only upstream component. Conceptually the same is true for
    in-tree tests, so the recommended approach is to define configuration
    settings in the code that uses them.
    
    How to do that is a bit uncertain. Viper has several
    drawbacks (maintenance status uncertain, cannot list supported
    options, cannot validate the configuration file). How to handle
    configuration files is currently getting discussed for kubeadm, with
    similar concerns about
    Viper (https://github.com/kubernetes/kubeadm/issues/1040).
    
    Instead of making a choice now for E2E, the recommendation is that
    test authors continue to define command line flags as before, except
    that they should do it in their own code and with better flag names.
    
    But the ability to read options also from a file is useful, so
    several enhancements get added:
    - all settings defined via flags can also be read from a
      configuration file, without extra work for test authors
    - framework/config makes it possible to populate a struct directly
      and define flags with a single function call
    - a path and file suffix can be given to --viper-config (as in
      "--viper-config /tmp/e2e.json") instead of expecting the file in
      the current directory; as before, just plain "--viper-config e2e"
      still works
    - if "--viper-config" is set, the file must exist; otherwise the
      "e2e" config is optional (as before)
    - errors from Viper are no longer silently ignored, so syntax errors
      are detected early
    - Viper support is optional: test suite authors who don't want
      it are not forced to use it by the e2e/framework
    cf0dcc6a